入力を単語ごとに読み取り、単語の長さを 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 になる必要があるため、他の単語がない場合は停止する必要があります。