Не видите, где я делю на 0?

Вот весь код, который, я думаю, кому-то понадобится, чтобы оценить мою проблему.

1 import.java.util.Scanner
2 public class ccattano_Sieve{
3         private boolean []  primes = new boolean [50001];
4         private int upper;
5         private int lower;
6 
7         public ccattano_Sieve(){
8             upper = 50000;
9             lower = 1;
10            for (int i = 2; i < primes.length; i++){
11                primes[i] = true;
12            }
13            primes[0] = false;
14            primes[1] = false;
15        }
16 
17        public void processSieve(){
18            for (int i = 2; i < Math.round(Math.sqrt(50000)); i++){
19                if (primes[i] == true){
20                    for (int c = 2; c < (primes.length - 1); i++){
21                        if (c % i == 0){
22                            primes[c] = false;
23                        }
24                        else{
25                            primes[c] = true;
26                        }
27                    }
28                }
29            }
30        }

Я почти уверен, что мое утверждение else в строках 24 - 26 не нужно, я добавил его, когда попытался решить проблему. Но в строке 21 при попытке запустить код я получаю ошибку деления на ноль. Точная ошибка заключается в следующем.

Exception in thread "main" java.lang.ArithmeticException: / by zero
at ccattano_Sieve.processSieve(ccattano_Sieve.java:21)
at ccattano_SieveTest.main(ccattano_SieveTest.java:7)

Эта строка "at ccattano_SieveTest.main(ccattano_SieveTest.java:7)" вызывает код, который я вставил, поэтому его можно игнорировать. Таким образом, строка 21 является основной проблемой, и я не могу найти решение.

2 ответа

Решение

Оператор модуля - это "остаток от деления", означающий, что он включает деление.

Я полагаю, у вас есть ошибка в строке 20, когда вы увеличиваете i вместо c. Это означает, что переменная i переполнится (достигнет настолько высокого уровня, что станет отрицательной) и в конечном итоге превратится в 0.

Вы никогда не обновляете значение c во внутреннем цикле; вместо этого вы увеличиваете i по длине вашего массива минус 1 каждый раз до квадратного корня 50000. Я подозреваю, что это ошибка, а не то, что вы хотите сделать, но я жду комментария об обратном.

Другие вопросы по тегам