2017-07-28 6 views
-1

これはコードです:ループは(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_トークンを取得するまで待機します。現在、 'Scanner :: next'は入力のスキャンを待っている間ブロックされています。したがって、 'if'ステートメントには決して行きません。 'if'ステートメントの前後で単純な' println'を実行すれば、この動作に気付くでしょう。 –

答えて

3

を見つけるだろう、あなたは空でEnterキーを押すとスキャナが返す方法

String word = reader.nextLine(); 

を試してみてください文字列。

+1

これは本当に問題を解決しますが、なぜOPコードが機能しないのか説明しません。私はOPがなぜ**なぜ**を最初に知りたかったと思います。したがって、説明を追加することで品質を向上させることができます。また、答えを広げるためには、[Scannerの公式文書](https://docs.oracle.com/javase/8/docs/api/java/util/Scanner.html)をよくお読みください。このような問題はしばしば解決されますすぐに。 – Zabuza

0

文字列が空白であることをどのように知っていますか?あなたは何も入力せずにenterを押しましたか?読者が改行文字を文字列に入れて空ではないということをどうやって知ったのですか?読んだ直後の読み込み文字列の長さのプリントを置く。 isEmpty()がfalseを返すなぜあなたはおそらく...かなり迅速に「読者が」スキャナのインスタンスであると仮定すると、

関連する問題