標準入力から入力を読み取ります。私の入力データは複数の行を持ち、最初の行はレコードの総数を持ち、2行目からレコードが始まります。すべての行がレコードです。私たちはn + 1行を持つでしょう。だから私はnextInt()
の最初の行の番号を読んでみたい。ここに私のコードです:デバッグモードでは、デバッグモードでステップ実行するたびに、Javaスキャナは次の区切り文字まで読み取ります
Scanner scanner = new Scanner(System.in);
//read number of lines for scanner to break loop
int numRecords = 0;
if (scanner.hasNextInt()){
numRecords = scanner.nextInt();
...
}
しかし、私はF6キーを押すたびに、私はscanner.next()
変更を参照してください。私は、入力として、テストデータの次の行を持っている場合:
3
1,1,[email protected],123 Sesame St.,New York,NY,10011,12345689010
2,1,[email protected],123 Sesame St.,New York,NY,10011,10987654321
3,2,[email protected],123 Sesame St.,New York,NY,10011,12345689010
私は自分のコードの行3に到達すると、
int numRecords = 0;
scanner.next()
は3
です。しかし、それはライン4に到達したとき、
if (scanner.hasNextInt()){
それは1,1,[email protected],123
なのでscanner.next()
が3
ではないのでif
条件はtrue
になることはありません。次回F6を押すと、Sesame
に変わります。
これは予期した動作ではありません。どうして?
わからない:理想的には、簡単にデータを毎回再入力することなく検証できる機能
parseRecord(String)
を、デバッグしたいと思います。私が正しく理解していれば、デバッガでscanner.next()を評価すると、スキャナが次のトークンに移動したことに驚いています。それは正常であり、期待通りです:それは、scanner.next()がするはずのものです。デバッグ中に副作用がある式を評価するのは良い考えではありません。 –'scanner.hasNextInt()'のようなものを条件として置くと、 'Scanner'を使うときにデバッグできません。しかし、私は 'scanner.nextInt()'を呼び出すのではなく、ただ評価しています。私は 'if'を' while 'に変更し、役に立たなかった。これは、 'Scanner'、最初の' hasNextXXX() '、' nextXXX() 'の使用時にどのようにコードするべきでしょうか? – FaithReaper
scanner.next()を評価すると、それを呼び出して結果を表示することになります。 scanner.next()の結果を変数に格納し、その変数を必要な回数だけ評価します。それは副作用がありません。 –