我的Java块中缺少什么?

时间:2016-11-19 07:33:28

标签: java c++

新手在这里。我有一个程序从数字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;
}

2 个答案:

答案 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);
        }
    }
}
}