我想添加两百万以下的素数,并且出于某种原因,它一直在没有输出的情况下运行。经过一些测试后,我知道错误本身在addprimes
函数中,但据我所知,程序应返回输出。
static ArrayList<Integer> primes = new ArrayList<Integer>();
public static void findPrimes(int limit)
{
primes.add(2);
int Number = 3;
int n = 0;
boolean add = true;
if(Number % 2 != 0)
primes.add(Number);
for(int i = Number; i<limit; i+=2)
{
n = 2;
add = true;
while(n < i)
{
if(i % n == 0)
{
add = false;
continue;
}
n++;
}
if(add == true)
primes.add(i);
}
}
public static int addPrimes()
{
int Total = 0;
int temp = 0;
for(int i = 0; i < primes.size(); i++)
{
temp = primes.get(i);
Total += temp;
}
return Total;
}
}
答案 0 :(得分:0)
您调用continue
时不会增加n
的值。
尝试将while
循环更新为以下内容:
while(n < i)
{
if(i % n == 0)
{
add = false;
n++;
continue;
}
else
n++;
}
查看this question的答案,了解有关continue
。
<强>更新强>
如果您的代码结果太大,那么您必须使用其他数据类型,如Long,Double ..etc。
答案 1 :(得分:0)
我可以看到值3在素数列表中重复,您可以注释掉这些行
// if(Number % 2 != 0)
// primes.add(Number);