新手在这里。我有一个程序从数字1-100中提取素数。下面的代码编译但在解释时给出一个空白输出。
但是,当我在嵌套的for-block(第二个for-block)中省略一对大括号时,它会给出正确的输出。
我也在C ++中尝试过这个问题,但问题是一样的。我在这里错过了什么吗?提前谢谢。
public class PrimeNumbers {
public static void main (String args[]) {
int i, j;
for(i=2;i<=100;i++) {
for(j=2;j<=(i/j);j++) {
if ((i%j == 0)) {
break;
}
if(j > (i/j)) {
System.out.println(i);
}
}
}
}
}
这是我在C ++中的代码,问题与第二个for-block相同
#include <iostream>
using namespace std;
int main() {
int i, j;
for(i=2;i<=100;i++) {
for(j=2;j<=(i/j);j++) {
if(!(i%j))
break;
if(j > (i/j))
cout << i;
}
}
return 0;
}
答案 0 :(得分:0)
第二个for循环for(j=2;j<=(i/j);j++)
的条件与第二个if语句if(j > (i/j))
冲突。您在j <=(i/j)
时退出for循环,但只在j > (i/j)
时打印。鉴于此,如果且永远不会到达System.out.println
,您将永远不会输入。
答案 1 :(得分:-1)
确定。在这里你可以检查2到100之间的素数。
public class PrimeNumbers {
public static void main(String args[]) {
int i, j;
for (i = 2; i <= 100; i++) {
boolean prime = true;
for (j = 2; j < i; j++) {
if (i % j == 0) {
prime = false;
j=i;
}
}
if (prime) {
System.out.println(i + " is prime");
}
}
}
关于您的代码,请在第二个if之前关闭嵌套for循环。 所以编辑你的代码如下:
public class PrimeNumbers {
public static void main(String args[]) {
int i, j;
for (i = 2; i <= 100; i++) {
for (j = 2; j <= (i / j); j++) {
if ((i % j == 0)) {
break;
}
}
if (j > (i / j)) {
System.out.println(i);
}
}
}
}