2015-06-17 10 views
0

你會如此善良,請幫助我嗎?我在做一個簡單的問答遊戲,在遊戲中用戶被要求輸入他的答案。它要麼A,B或C.我想這個覆蓋了try/catch的例外...除了使用異常的字符串外,我怎樣才能讀取其他內容?

我想要這個代碼做的,是拋出異常(強制用戶再次輸入答案)每當他會輸入其他字符串。 這裏是一個代碼

Scanner sc = new Scanner(System.in); 
String answer = ""; 
boolean invalidInput = true; 

while(invalidInput){ 
    try { 
     answer = sc.nextLine().toUpperCase(); 
     invalidInput = false; 
    } 
    catch(InputMismatchException e){ 
     System.out.println("Enter a letter please"); 
     invalidInput = true; 
    } 
}  

現在的問題是,如果我輸入一個整數,它不會扔東西的一部分。

感謝

+2

如何使用regex有關讀取字符而不是整數,並且過濾字符代碼?像這樣的東西。 http://stackoverflow.com/questions/4945695/how-to-filter-string-for-unwanted-characters-using-regex或http://stackoverflow.com/questions/13012871/converting-ascii-code-to- char-in-java – Nagarz

+1

@Nagarz你的評論應該是一個答案;-) – LionC

+0

@LionC也許,但它不是一個答案,而是一個想法,因爲這不是他要求的。 – Nagarz

回答

1

簡單地拋出一個InputMismatchException如果數據並不如你預期。

Scanner sc = new Scanner(System.in); 
String answer = ""; 
boolean invalidInput = true;  
while(invalidInput){ 
    try { 
     answer = sc.nextLine().toUpperCase(); 
     if (!answer.equals("A") && !answer.equals("B") && !answer.equals("C")) { 
      throw new InputMismatchException(); 
     } 
     invalidInput = false; 
    } catch (InputMismatchException e) { 
     System.out.println("Enter a letter please"); 
     invalidInput = true; 
    } 
} 

請注意,對於此類控件不需要拋出異常。您可以直接在if代碼中處理錯誤消息。

+0

如果需要,拋出InputMismatchException –

+0

謝謝,這就是我一直在尋找的東西。我想從一開始就使用if語句,但任務是使用例外......這是它的組合,並且它像嬰兒的屁股一樣順暢地工作。謝謝。 – FussV

1

現在的問題是,如果我輸入一個整數,它不會引發任何 。

沒有問題是你認爲這是一個整數,它實際上是字符串。

String s=1; //Gives Compilation Error 

String s="1"; // will not give any Error/Exception and this is your case 

用戶提供輸入,直到它符合您的預期輸入列表中,這樣的事情:

List<String> expectedInputs=Arrays.asList("A","B","C","D"); 
String input=takeInputFromUser(); 
if(expectedInputs.contains(input)){ 
    //doWhatever you want to do 
}else{ 
    // throw any Exception 
} 
+0

感謝您指出,糾正它:) –

0

,我建議你在這種情況下

try { 
    answer = sc.nextLine().toUpperCase(); 
    invalidInput = !answer.matches("[ABC]");     
} catch(InputMismatchException e){ 
    System.out.println("Enter a letter please"); 
    invalidInput = true; 
} 
+0

謝謝,注意。雖然,我被老師強迫使用例外。下次我會這樣做。 – FussV

相關問題