1

这是我认为任何人都需要能够评估我的问题的所有代码

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 行的 else 语句,我在尝试解决问题时添加了它。但是在第 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 行是主要问题,我找不到解决方案。

4

2 回答 2

7

模运算符是“除法的其余部分”,这意味着它涉及除法。

我相信你在第 20 行有一个错误,你在增加 i 而不是 c。这意味着 i 变量将溢出(达到如此之高以至于它将变为负数)并最终变为 0。

于 2013-04-18T02:05:50.720 回答
0

您永远不会在内部循环中更新 c 的值;相反i,您每次都会增加数组的长度 - 1,直到 50,000 的平方根。我怀疑这是一个错误,而不是您想要做的,但我等待相反的评论。

于 2013-04-18T02:10:40.783 回答