2013-02-16 64 views
1

出於某種原因,我得到的結果是輸入的小寫字母「y」比輸入的大寫字母「Y」的結果不同。輸入「y」執行if語句中的代碼,但輸入「Y」不會。另外,「Y」的輸入不執行中斷;之後。爲什麼這是我做錯的?對掃描器對象使用.equals()

Scanner playAgain = new Scanner (System.in); 


System.out.println ("Play Again (Y/N)"); 

if ((playAgain.next().equals("y"))||(playAgain.next().equals("Y"))) 
{ 
Game theGame1 = new Game(0); 
currentPts = currentPts + theGame1.play(total); 

System.out.println("Current total is:" + " " + currentPts); 
} 
else break; 
+2

調用next()兩次當輸入'Y'時 - 表示該流將被讀取兩次。 – nhahtdh 2013-02-16 19:57:25

回答

8

在這種情況下:

if ((playAgain.next().equals("y"))||(playAgain.next().equals("Y"))) 

您打電話給playAgain.next()兩次 - 所以它會從用戶那裏獲取兩個不同的字符串。

我相信你只是爲了獲取一個字符串:

String answer = playAgain.next(); 
if (answer.equals("y") || answer.equals("Y")) 

或者,只是使用equalsIgnoreCase,這意味着你可以讀一次:

if (playAgain.next().equalsIgnoreCase("y")) 
+0

您的解決方案徹底解決了問題!感謝您教我equalsIgnoreCase,我相信它可能在未來派上用場! – user2034570 2013-02-17 06:39:48

7

您在if語句中閱讀了兩次。因此,如果您輸入"Y",那麼您的第二個playAgain.next()不會讀取"Y"

可以存儲在varaible讀取輸入,並使用它來代替:

String input = playAgain.next(); 
if ((input.equals("y"))||(input.equals("Y"))) 

除此之外,您還可以使用更好的equalsIgnoreCase方法:

if (playAgain.next().equalsIgnoreCase("y")) 
+0

問題解決了!謝謝! – user2034570 2013-02-17 06:40:12

+0

@ user2034570。歡迎您:) – 2013-02-17 06:50:23

+0

@ user2034570。請記住將其中一個答案標記爲已接受。這就是你如何將問題標記爲已解決的問題。除了答案之外,您需要標記空心箭頭以將其標記爲已接受。 – 2013-02-17 06:50:46