2017-07-28 105 views
-1

這是代碼:While循環不會打破(JAVA)

Scanner reader = new Scanner(System.in); 
while (true) { 

    System.out.print("Type a word: "); 
    String word = reader.next(); 

    if (word.isEmpty()) { 
     break; 
    } 

} 

即使我有break;if語句中它仍然運行即使我在一個空字符串輸入。我錯過了什麼?

+0

您的讀者在哪裏申報和分配? – MetaColon

+0

首先,學習如何調試 – maszter

+3

'Scanner :: next'從掃描器返回下一個* complete *標記。一個*完整的*標記前後有與分隔符模式匹配的輸入。本質上,'Scanner :: next'等待它獲得_complete_標記。目前,在等待輸入掃描時,「掃描儀::下一個」被阻止。所以它永遠不會進入'if'語句。只要在if語句之前和之後做一個簡單的'println',你就會注意到這種行爲。 –

回答

3

假設「讀者」是一個掃描器例如,嘗試

String word = reader.nextLine(); 

這樣,掃描儀將返回當您按下進入一個空串。

+1

雖然這確實解決了問題,但它並不能解釋爲什麼OP代碼不起作用。我認爲OP首先想知道**爲什麼**。所以你可以通過增加一個解釋來提高質量。另外,爲了擴大答案,請仔細閱讀[Scanner的官方文檔](https://docs.oracle.com/javase/8/docs/api/java/util/Scanner.html),它通常可以解決這些問題立即。 – Zabuza

0

你怎麼知道你的字符串是空白的?你按下輸入而不輸入任何內容?你怎麼知道讀者沒有把新的行字符放到字符串中導致它不爲空?在讀取之後立即打印讀入字符串的長度;你可能會發現很快爲什麼的isEmpty()返回false ..