私のプログラムでは、ユーザーから入力する必要がありますが、整数でなければなりません。ユーザーが整数を入力しない場合は、整数を入力するように再指示するプログラムが必要です。完璧に動作ループコードスニペットのオンラインながら、私は例を見つけましたが、私はなぜ、どのようにそれが動作の問題は理解した、と私は本当に良く理解したいと思います:この例でJava Scannerオブジェクトがどのように機能しているかわかりません(hasNextInt、next ...?)
Scanner reader = new Scanner(System.in);
int guess=0;
System.out.println("Guess the number");
while (!reader.hasNextInt()) { //I get that this is a "not have" boolean
System.out.println("That's not a number. Please enter a valid number");
reader.next();
}
guess= reader.nextInt();
System.out.println(guess);
私の質問は以下のとおりです。
- whileループの!hasNext条件は、実際にユーザーに入力を要求し、その入力を確認するためにスキャナオブジェクトをトリガしますか、または既に入力されたものだけをチェックしますか?
- なぜreader.next()が必要ですか。 whileループのメインステートメントの後の行と、これは正確に何ですか?私はそれを取るときにプログラムが機能しないので、それが必要であることを知っています。しかし、それは入力を促していますか?はいの場合、この入力はどうなりますか?
- guess = reader.nextInt();実行すると、なぜユーザーはこの時点で入力を促しますか?
申し訳ありませんが、これらはおそらく基本的な質問ですが、私はコーディングとJavaの新機能で、この特定の例では内部的に何が起こっているのかについて頭を浮かべることはできません。スキャナ。
google [java Scanner hasNextInt()](https://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#hasNextInt)よりも、stackoverflowで質問を書くのに時間がかかります。 ()と[java!operator](https://docs.oracle.com/javase/tutorial/java/nutsandbolts/opsummary.html) – devpuh
独自の調査や独自のテストを防止するためのさらに別の「私は新しい」弁解があります。 _easily_なぜあなたが 'next()'を削除して何が起こったのかをテストするときになぜそれが必要なのかを知ることができます。 – Tom
申し訳ありませんが、私は実際に自分自身でこれを動作させるのに長い時間を費やしており、これまでの多くの質問を見てきました。これは正直に最後の手段でした。私が言ったように、私はそれを実験して取り除き、それが機能しなかったので、next()が必要であることを知っていました。私はそれが必要な理由を理解していませんでした。 –