Alex Rivera | Logout

Why is Java not telling me when I can't use Integer?

Asked 2010-05-14T12:52:37.010
10

For a small project (Problem 10 Project Euler) i tried to sum up all prime numbers below 2 millions. So I used a brute force method and iterated from 0 to 2'000'000 and checked if the number is a prime. If it is I added it to the sum:

private int sum = 0;

private void calculate() {
   for (int i = 0; i < 2000000; i++) {
      if (i.isPrime()) {
         sum = sum + i;
      }
   }
   sysout(sum)
}

The result of this calculation is 1179908154, but this is incorrect. So i changed int to BigInteger and now i get the correct sum 142913828922. Obviously the range of int was overflowed. But why can't Java tell me that? (e.g. by an exception)

Edit
Report

1 Answer

1

The other reason is that you can do this check yourself very easily and quickly.

if (sum+i < sum) {
  throw new AritchmeticException();
}

should do the trick nicely, given that you know i is always positive and less than Integer.MAX_VALUE.

answered 2010-05-14T16:25:41.130

Your Answer