scanner.hasNext()导致无限循环

时间:2013-09-30 19:01:42

标签: java java.util.scanner infinite-loop

我有一段代码应该逐字读取输入,并递归地将单词的长度添加到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()只有在输入中有下一个单词时才应该为真,所以当没有其他单词时它应该停止。

2 个答案:

答案 0 :(得分:3)

System.in是输入流。它永远不会关闭,所以对于#hasNext()

它总是会返回true

答案 1 :(得分:0)

在Windows中使用Ctrl+Z(+ Enter)或在Unix中使用Ctrl+D发送EOF并终止输入流