以下是我认为任何人都需要能够评估我的问题的所有代码
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 }
我很确定我在第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)
此行“在ccattano_SieveTest.main(ccattano_SieveTest.java:7)”调用我粘贴的代码,因此可以忽略它。因此第21行是主要问题,我找不到解决方案。
答案 0 :(得分:7)
模数运算符是“除法的其余部分”,意味着它涉及一个除法。
我相信你在第20行有一个错误,你在增加i而不是c。 这意味着i变量将溢出(达到如此之高以至于它将变为负值)并最终变为0。
答案 1 :(得分:0)
你永远不会在内循环中更新c的值;相反,你增加i
每个数组的长度减去1,直到50,000的平方根。我怀疑这是一个错误,而不是你想做什么,但我等待相反的评论。