2012-10-15 153 views
0

我試圖接受來自用戶的輸入形式的字符。我有這個工作,但我需要檢查並確保它是6個字符(H,H,S,S,L,L)之一。我有一個while循環,但只要向它添加多個字符語句,循環會爲每個應該正確的值給出錯誤。while循環來檢查字符輸入

下面是函數:

private static char getHighLow(Scanner keyboard) 
{ 
    System.out.println("High, Low, or Sevens (H/L/S): "); 
    String choiceString = keyboard.next(); 

    char choice = choiceString.charAt(0); 

    while (choice != 'H' || choice != 'h' || choice != 'L' || choice != 'l' || choice != 'S' || choice != 's') 
    { 
     System.out.println("You have entered an invalid entry."); 
     System.out.println("High, Low, or Sevens (H/L/S): "); 
     choiceString = keyboard.next(); 
    } 

    return choice; 

} 

什麼是繼續檢查多個字符這樣的最佳方式?

回答

3

有一個在你的邏輯錯誤:你應該連接與那些測試:&&

while (choice != 'H' && choice != 'h' && choice != 'L' && ... 

此外choice永遠不會被循環體內更新,所以它永遠不會更改。在循環中重新讀取choiceString後複製choice = choiceString.charAt(0);

從概念上講,只要字符不是H並且不是L並且不是S,您想繼續詢問輸入。

+0

完美。感謝您的幫助! – malibubts

4

使用&&而不是||

while (choice != 'H' && choice != 'h' && choice != 'L' && choice != 'l' && choice != 'S' && choice != 's') 

這可以通過首先轉換爲小寫字母來簡化。

choice = Character.toLowerCase(choice); 

while (choice != 'h' && choice != 'l' && choice != 's') 
+0

完美無瑕。我想我現在已經明白了這一點,但如果我錯了,請糾正我。除非輸入這些字符,否則我不想輸入該循環。所以它檢查每個字符並失敗,因爲每個AND都需要是真的? – malibubts

2

你從來沒有在您的while循環更新choice

只需在循環的末尾添加一行:

choice = choiceString.charAt(0); 

而且你應該&&而非||檢查。