2016-11-19 80 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,則永遠不會輸入該值。