2017-04-17 222 views
0

我想創建一個程序,我使用getInt方法來確保用戶輸入正數。我有這個迄今爲止在java上退出while循環

public class Binary { 
    public static void main(String [ ] args) { 
    Scanner CONSOLE = new Scanner(System.in); 
    int decimal=getInt(CONSOLE, "Enter a positive integer: "); 

    } 

    public static int getInt(Scanner CONSOLE, String prompt) {      
    System.out.print(prompt); 
    while (!CONSOLE.hasNextInt()) { 
    CONSOLE.next();       
    System.out.println("Not an integer; try again.");       
    System.out.println(prompt); 
    } 
    int posInt=CONSOLE.nextInt(); 
    while (posInt <= 0) { 
    System.out.println("Not a positive integer; try again."); 
    CONSOLE.next(); 
    System.out.println(prompt); 
    } 
    return CONSOLE.nextInt(); 
    } 

}  

出現該問題,當用戶不輸入一個正數,但它仍然無視輸入,並要求用戶重新輸入一個正整數。我想我只是沒有正確退出循環,但我不知道如何。

+1

行'return CONSOLE.nextInt();'似乎在提示用戶輸入另一個整數,即使它們已經輸入了一個。 –

回答

2

你的問題是return CONSOLE.nextInt();

在你的方法結束時,您呼叫CONSOLE.nextInt()它要求輸入一次。

返回posInt,你會沒事的。

祝你好運,HTH

+0

我曾試過這樣做,它繼續給我同樣的問題。 –

0

像別人說你可以返回posInt,你應該罰款。
但我有你的getInt方法提出了一些建議:

public static int getInt(Scanner CONSOLE, String prompt) { 
    //initialize vars 
    boolean valid = false; 
    int posInt = 0; 
    //while the input is not valid, loop over the evaluation 
    while(!valid){ 
     System.out.print(prompt); 
     if (!CONSOLE.hasNextInt()) { 
      CONSOLE.next(); 
      System.out.println("Not an integer; try again."); 
      //"continue" stops the loop here and starts it from the beginning 
      continue; 
     } 
     posInt=CONSOLE.nextInt(); 
     if (posInt > 0) { 
      //valid = true will get us out of the loop 
      valid = true; 

     }else { 
      System.out.println("Not a positive integer; try again."); 
     } 

    } 
    return posInt; 
} 

此代碼將重新評估從一開始就輸入如果輸入無效之前。
在你的代碼中,如果你輸入一個負值,你會被提示重新輸入一個數字。
但由於您已經在while (posInt <= 0)循環中,因此如果您實際輸入的是有效輸入,則不會重新檢查。

我提供的代碼重新評估從開始的下一個輸入,直到它被發現有效。

+0

這確實奏效!謝謝你的解釋 –

+0

@ElizabethFlores如果這個答案對你最合適,請將我的答案加註並標記爲最佳答案,以便其他有類似問題的人可以更容易地找到解決方案。 很高興我能幫到=) – DShade

+0

我如何將它標記爲最佳答案?這是我的第一篇文章,所以我是一個新手 –