2014-02-18 24 views
0

所以我的任務是創建一個java程序,打印所有數字從2-500包含,每行10個數字。我學習了循環的基礎知識和方法的簡介。我已經看過其他問題/答案,但是,我似乎無法將所有信息合併到可行的代碼中。打印素數2至500包括

int n; 
for (int count = 0; count < 10; count++) { 
    for (n=2; n <= 500; n++){ 
     for (int i = 2; i <= Math.sqrt(n); i++) { 
      if (n % i != 0) 
       System.out.print(i + " "); 
     } 
    } 
System.out.println();  
} 

這就是我所擁有的,我打印出一組非常奇怪的數字。我知道我的if聲明有問題,我知道我沒有設置它來正確打印正確的值,我只是處於完全的損失。

老實說,我仍然無法弄清楚爲什麼我只需要檢查i到sqrt n

基本上我想要的代碼行以某種方式打印出來

2 3 5 7 11 13 17 19 23 29 ,然後跳轉到下一行那裏將繼續

etc etc etc

使用方法,最有效的方法是什麼?我試圖避免它,因爲方法只是最近才引入的。

+2

你爲什麼要打印'i'?當然你想打印'n'?然後,只有所有的可分性測試失敗。 –

+0

我已經發布[一​​個答案](http://stackoverflow.com/a/21884207/849891)這個問題下[其重複標記在這裏](http://stackoverflow.com/questions/18667400/printing-出黃金數 - 從2到1000)。 –

回答

1

正如在評論中提到的,您的問題已經得到解答。剩下的就是:如何每行打印10個數字,更確切地說,每次打印10個數字時如何跳到下一行。

這裏有一個想法:

int c = 0; // This will hold the number of prints 
for(int n = 2; n <= 500; n++) { 
    // Check if n is prime (already answered), and if it is, print it 
    if(isPrime(n) { 
     System.out.print(n + " "); 
     c++; 
    } 
    if(c >= 10) { 
     System.out.print("\n"); 
     c = 0; 
    } 
} 
+0

好吧,所以我幾乎實現了一切,但10個輸出後的分界線。 所以基本上,main方法中的'i'被傳遞到isPrime方法中的'n'中,然後與另一個'i'變量進行比較? – user3278117

0

事情是這樣的:

int n; 
for (n = 2; n <= 500; n++) { 
    double limit = Math.sqrt(n); 
    int i; 
    for (i = 2; i <= limit; i++) { 
     if (n % i == 0) { 
      break; 
     } 
    } 
    if (i > limit) { 
     System.out.print(n + " "); 
    } 
} 

輸出是:

2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199 211 223 227 229 233 239 241 251 257 263 269 271 277 281 283 293 307 311 313 317 331 337 347 349 353 359 367 373 379 383 389 397 401 409 419 421 431 433 439 443 449 457 461 463 467 479 487 491 499