次のコードをご覧ください。Javaスキャナの問題?
package com.company;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// write your code here
Scanner input = new Scanner (System.in);
System.out.print("Enter the number of students: ");
int numberOfStudents = input.nextInt();
String[] students = new String [numberOfStudents];
//input.nextLine();
for (int i = 0; i < students.length; i++){
System.out.println("Enter name for student " + (i+1) + ":" );
students[i] = input.nextLine();
}
for (int i = 0; i < students.length; i++){
System.out.println(students[i]);
}
}
}
私は "input.nextLine();"というステートメントをコメントアウトしています。最初のループの直前に、このコードを実行すると(これは私の元のコードでした)、ループは2回実行されてから停止し、入力を待ってから通常通り続行します。これを修正するには、それが正常に動作し、すべての反復の後で停止し、入力を求めます。なぜこれが似ているのですか、Scannerはどのように機能していますか?
出力例:input.nextLine(なし
)。ループの前に:
Enter the number of students: 4
Enter name for student 1:
Enter name for student 2:
name1 name2
Enter name for student 3:
name3
Enter name for student 4:
name4
そして、もし私がinput.nextLine()のコメントを外すならば。
Enter the number of students: 4
Enter name for student 1:
name1
Enter name for student 2:
name2
Enter name for student 3:
name3
Enter name for student 4:
name4
これは正常に実行されます。
これは予想される動作です。 'nextInt()'を使うと行が終了することはないので、次回の 'nextLine()'の間に 'nextLine()'を使ってより多くの入力を待たなければなりません。 – Zircon
** //input.nextLine();という行があるためです。ユーザー入力文字列を読み込み、それをスローします。それは何にも割り当てられません。 forループに格納され始めます –
ありがとうございました。 –