【发布时间】:2013-11-17 02:46:58
【问题描述】:
首先让我说我知道有很多关于素数的问题,这更多是关于我的代码,特别是布尔语句。
public class SumPrime
{
public static void main(String[] args) {
int top = inputInt("enter the number please");
int sum;
if (top > 2) {
sum = 2;
} else {
sum = 0;
}
int i;
int l;
for(l=3; l<top; l+=2){
boolean k = test(l);
String r;
if(k = true){
sum=sum+l;
output(l);
}else {
sum=sum;
}
}
System.out.println("The sum is " + sum);
}
static boolean test(int v) {
if (v%2==0)
return false;
for(int i=3; i<v; i+=2) {
if(v%i==0)
return false;
}
return true;
}
我正在尝试编写一个程序,该程序将为我提供低于输入值的素数总和。 在上面的代码下面,我有输入/输出语句,所以这不是问题。至少在我看来,这段代码应该可以毫无问题地工作。我对 java 比较陌生,对布尔变量和语句也很陌生,所以很容易出现问题。 (我搜索了一个答案,一无所获)
测试子程序应该检查一个数字是否是素数,如果是则返回true,如果不是则返回false。它似乎对每个值都返回 true,即使对于不是素数的数字也是如此。如果我输入 10 作为上限,则程序返回总和 26,而不是 17。即使它应该检查素数,它似乎也包括了所有奇数。
我无法弄清楚为什么这段代码不起作用。就像我说的,我认为错误与布尔方法有关。
【问题讨论】:
-
使用调试器并逐步执行您的
test方法。看起来是正确的;如果你是在编辑器中手动编写的,你确定你已经重新编译了吗? -
我使用 BlueJ,是的,我重新编译了。它编译得很好,它只包括所有赔率,而不仅仅是素数。
-
首先,corn3lius 的回答似乎解决了你的整个问题。但是……在未来,只是你一个调试器,并逐行遍历可疑的方法。一步一步看看实际发生了什么。
-
好的,感谢您的回答。你会推荐什么调试器?
-
Eclipse、Netbeans、IntelliJ、System.out.println...随便挑一个吧:)