2016-11-19 47 views
-2

这里是新手。我有一个从1-100数字提取素数的程序。下面的代码编译,但解释时会给出空白输出。我在Java块中错过了什么?

但是,当我在嵌套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++代码,这个问题与第2换块

#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

如果您在C++中尝试“this”,那么代码在哪里? –

回答

-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); 
     } 
    } 
} 
} 
+0

这就是我错过的地方。我的第二个If块应该属于第一个For块。谢谢,这回答了我的问题。 – paulllt

0

你的第二个for循环for(j=2;j<=(i/j);j++)冲突与你的第二个if语句if(j > (i/j))条件相同。当您退出for循环时,j <=(i/j)但您只在j > (i/j)时打印。鉴于此,如果且永不达到System.out.println,则永远不会输入该值。