2016-02-24 24 views
-1

我正在嘗試讓用戶按Enter鍵以便生成下一個素數。在用戶生成了他們需要的素數之後,他們將輸入0以便程序結束。目前,該方案剛剛吐出所有的數字,直到它擊中了極限,我需要它,當他們進入0試圖讓用戶點擊輸入以生成下一個素數

public static void main(String[] args) { 
    Scanner input = new Scanner(System.in); 
    while(!input.hasNextInt(0));  
     for(int i=2; i<=1000; i++){ 
      for(int j=2; j<=i; j++){ 
       if(j==i){ 
        System.out.println(i); 
       } 
       if(i%j==0){ 
        break; 
       } 
      } 
     } 
    } 
} 
+1

哪裏是你提問中的問題發言? – Aditya

+0

該程序只能一次性吐出所有數字,而不是等到用戶按下回車鍵。另外,如果用戶沒有按回車鍵並輸入0,程序將需要結束。 –

回答

0

問題是你的外部for循環在下一次while循環檢查之前從2到1000完全迭代。當你試圖用if(i%j==0)打破for循環,你只是打破if

這裏是一個修改後的版本,演示和演示我的意思。請注意,我也跟着其他的答案爲更好的形式的建議:關閉您的掃描儀,並且不使用.hasNextInt(int)

try (Scanner scanner = new Scanner(System.in)) { 
    for (int i = 2; i <= 1000; i++) { 
     String next = scanner.nextLine(); 
     if(next.equals("0")){ 
      return; 
     }else{ 
      for(int j = 2;j<=i;j++){ 
       if(j==i){ 
        System.out.println(j); 
       }else if(i%j==0){//if j is divisible by i... 
        i++;   //try the next i, so we don't print a blank line 
        j=2;   //and reset j 
       } 
      } 
     } 
    } 
} 
1

只打印了一些當用戶按下輸入,或最終刪除分號'!while(!input.hasNextInt(0))'之後的,然後嘗試從那裏調試。該分號無效while循環。相反,由於開括號替換:

public static void main(String[] args) { 
    Scanner input = new Scanner(System.in); 
    while(!input.hasNextInt() && !(input.nextInt() == 0)) {  
     for(int i=2; i<=1000; i++){ 
      for(int j=2; j<=i; j++){ 
       if(j==i){ 
        System.out.println(i); 
       } 
       if(i%j==0){ 
        break; 
       } 
      } 
     } 
    } 
    input.close(); 
} 

而且,最好的做法,關閉資源(掃描儀),當他們不再需要。

0

input.hasNextInt不檢查,如果輸入的值是0。對於這一點,你會想 - 要進行多次檢查

while (input.nextInt() != 0) { ... } 

-except,所以你要保存的下一個輸入。也許類似

public static void main(String[] args) { 
    Scanner scanner = new Scanner(System.in); 

    System.out.println("First scan: "); 
    String next = scanner.nextLine(); 
    while (!("0".equals(next))) { 
     if (next.isEmpty()) { 
      System.out.println("Next prime"); 
     } else { 
      System.out.println("String: " + next); 
     } 
     System.out.println("Next scan: "); 
     next = scanner.nextLine(); 
    } 

    System.out.println("Done"); 
    scanner.close(); 
} 

這是一個快速測試,我鞭打。只要下一個輸入變量不爲0,我們現在就會循環。即使用戶輸入空白行(換句話說,如果他們剛剛輸入),scanner.nextLine()也會提交。

相關問題