2010-04-11 68 views
1

這是我迄今爲止寫的內容,但是當引發異常時,它不會再要求用戶輸入。如何從鍵盤取得整數輸入,如果輸入無效,我該如何再次詢問用戶?

do { 
     System.out.println("Enter the number of stones to play with: "); 
     BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
     String temp = br.readLine(); 
     key = Integer.parseInt(temp); 
    } while (key < 0 && key > 9); 

    if (key < 0 || key > 10) 
     throw new InvalidStartingStonesException(key); 

    player1 = new KeyBoardPlayer(); 
    player2 = new KeyBoardPlayer(); 
    this.player1 = player1; 
    this.player2 = player2; 
    state = new KalaGameState(key); 
} catch (NumberFormatException nFE) { 
    System.out.println("Not an Integer"); 
} catch (IOException e) { 
    System.out.println(e); 
} 
+3

的代碼確實沒有做到這一點。您之前已經使用另一個帳戶問過類似問題:http://stackoverflow.com/questions/2614930/i-am-getting-exception-in-main-thread-even-when-i-am-handling-the-exception請註冊您的帳戶,並堅持使用同一個帳戶:http://www.google.com/search?q=InvalidStartingStonesException+site%3Astackoverflow.com – BalusC 2010-04-11 04:45:23

+1

標記爲功課? – Anonymoose 2010-04-11 06:10:51

回答

3

只要是NumberFormatException被拋出,你跳出循環,並下降到catch。如果您的try-catch區塊是裏面的您的while循環,它會有你要找的效果。您可能需要調整循環中的條件。

-1
while (true) { 
    System.out.println("Enter the number of stones to play with: "); 
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
    key = Integer.parseInt(br.readLine()); 
    if (key > -1 && key < 10) 
     break; 
    else 
     System.out.println("Invalid number of stones. Choose from 0 - 9"); 
} 
+0

不處理'NumberFormatException' - 同樣,這是(我懷疑)一個​​作業問題,讓我們可能更喜歡明確寫出解決方案的好提示。 – Etaoin 2010-04-11 05:11:17

0

另一種方法是檢查字符串輸入是否與整數的正則表達式匹配。如果不匹配,則再次要求輸入。

0

我會推薦的是,而不是使用所有這些例外是使獨立的方法,讀取特定的數據類型。 (例如)

import java.util.Scanner;

公共類的HelloWorld {

public static void main(String[] args){ 
    int n = getInteger("Enter integer: "); 

    System.out.println(n); 

} 

public static boolean isInteger(String s){ 

    if(s.isEmpty())return false; 
    for (int i = 0; i <s.length();++i){ 
     char c = s.charAt(i); 
     if(!Character.isDigit(c) && c !='-') 
      return false; 
    } 

    return true; 
} 

public static int getInteger(String prompt){ 
    Scanner input = new Scanner(System.in); 
    String in = ""; 
    System.out.println(prompt); 
    in = input.nextLine(); 
    while(!isInteger(in)){ 
     System.out.println(prompt); 
     in = input.nextLine(); 
    } 

    return Integer.parseInt(in); 

} 

}

相關問題