1

入力を単語ごとに読み取り、単語の長さを ArrayList に再帰的に追加するコードがあります(学校の演習用)。

私はこの方法を書きました:

ArrayList<Integer> wordLengths = new ArrayList<Integer>();
Scanner scanner = new Scanner(System.in);
// ...
private void readWords() {
    // read a word, if there are more words, read the next word
    this.wordLengths.add(this.scanner.next().length());

    if (this.scanner.hasNext()) {
        readWords();
    }
}

このメソッドを呼び出すと、新しい単語を要求し続けます。(再帰的) ループは停止しません。なぜこうなった?this.scanner.hasNext()入力に次の単語がある場合にのみ true になる必要があるため、他の単語がない場合は停止する必要があります。

4

2 に答える 2

3

System.inは入力ストリームです。閉じられることはないため、#hasNext() に対しては常に true を返します。

于 2013-09-30T19:07:13.507 に答える
0

Ctrl+ZWindows または Unix で (+Enter) を使用Ctrl+Dして、EOF を送信し、入力ストリームを終了します。

于 2013-09-30T19:17:03.003 に答える