所以我刚刚启动了一些java,我试图让用户输入一个数字并测试它是否是素数。这是我对该程序的循环。
do{
for(testNumber = 2; testNumber < numb; testNumber++){
if(numb % testNumber == 0){
test = false;
}else{
test = true;
}
}
if(test = true){
System.out.println("The number is prime.");
}else{
System.out.println("The number is not prime.");
}
System.out.println("Enter a number. Enter 0 to exit.");
numb = number.nextInt();
}while(numb != 0);
输入的每个数字都变为真实!对我来说逻辑似乎是正确的。
答案 0 :(得分:3)
if(test = true){
应该是
if(test == true){
第一个是“assignment”运算符,第二个是逻辑(相等测试)运算符。详细了解official documentation。
我不会评论您的代码的其他部分作为学习练习。您的代码可以进行优化和改进!你走在正确的轨道上。坚持下去!
答案 1 :(得分:2)
首先,您正在使用赋值运算符=
将test
与true
进行比较,从而导致test
始终为true
。它已经是boolean
,只需使用它而无需进行无关的比较:
if(test){
其次,您在每个test
循环迭代中覆盖for
的值。将其初始化为true
,如果找到因素,则只将其设置为false
。
test = true;
for(testNumber = 2; testNumber < numb; testNumber++){
if(numb % testNumber == 0){
test = false;
}
}
此外,您无需测试testNumber
超过数字numb
的平方根。
int limit = (int) Math.sqrt(numb);
for(testNumber = 2; testNumber <= limit; testNumber++){
答案 2 :(得分:0)
如果找到它并且条件== true
,您应该中断do{
for(testNumber = 2; testNumber < numb; testNumber++){
if(numb % testNumber == 0){
test = false;
break;
}else{
test = true;
}
}
if(test == true){
System.out.println("The number is prime.");
}else{
System.out.println("The number is not prime.");
}
System.out.println("Enter a number. Enter 0 to exit.");
numb = number.nextInt();
}while(numb != 0);
答案 3 :(得分:0)
你有两个问题。首先,考虑一下你的循环逻辑:你在循环的每次传递中都主动设置test
变量。由于循环在numb - 1
处结束,因此在最后一次传递中它几乎总是将test
设置为true
。相反,在循环之前将test
设置为true
,如果找到一个因素,则只将其设置为false
:一旦检测到它,就会将其设为false
&#39} ;不是素数。 (将该循环置于单独的方法中,以便您可以立即return
更好。)
isPrime = true;
for(int factor = 2; factor < numb; factor++) { // see below for advice on condition
if(numb % factor == 0)
isPrime = false;
}
其次,您在test
声明中设置 if
。您必须使用==
来检查是否相等,而在Java中,使用if(test)
会更加惯用。
作为一种风格问题,名为test
的变量不是很具描述性。我建议使用上面使用的isPrime
名称。
最后,您只需要检查testNumber
的平方根,但不要使用浮点运算然后截断结果,否则您可能会错过精确的平方根因子