2
int id;
float grade; 
String name;
Scanner z= new Scanner(System.in);
System.out.println("Give the id:\n");
id=z.nextInt();
System.out.println("your id is :"+id+"\n");

System.out.println("Give the name:");
name=z.nextLine();
System.out.println("your name is :"+name);

System.out.println("Give the grade:\n");
grade=z.nextFloat();

問題は次のようになります。整数を入力しますが、文字列になると「名前を付けてください」と出力されますが、何かを入力するまで待機せず、次の命令にスキップします。

なぜですか?

4

3 に答える 3

3

を使用しているためname=z.nextLine()、そのような動作は に置き換えますname=z.next()。以下は編集されたコードです:

int id;
float grade; 
String name;

Scanner z= new Scanner(System.in);
System.out.println("Give the id:\n");
id=z.nextInt();
System.out.println("your id is :"+id+"\n");

System.out.println("Give the name:");
name=z.next();
System.out.println("your name is :"+name);

System.out.println("Give the grade:\n");
grade=z.nextFloat();
于 2013-10-21T06:12:19.633 に答える
2

intを使用して値を読み取ると、値のみnextIntが読み取られ、改行文字がスキップされます。後者は次に読み込まれ、「実際の」入力をスキップします。intnextLine

nextLine"real" の前に別のものを追加することでこれを修正できます。読みたくないものをnextLine飲み込みます。'\n'

重要な注意int: ID 値の保存には使用しないでください。代わりStringに使おう!

于 2013-10-21T06:19:03.480 に答える
1

問題はinput.nextInt()、int 値のみを読み取るコマンドにあります。そのため、input.nextLine() を使用して読み続けると、"\n" Enter キーが返されます。したがって、これをスキップするには、input.nextLine() を追加する必要があります。

id  = z.nextInt();
System.out.println ("your id is :"+id+"\n");
z.nextLine ();// add this line between the next line read

System.out.println("Give the name:");

また

id = Integer.parseInt(z.nextLine());
System.out.println ("your id is :"+id+"\n");
System.out.println("Give the name:");
于 2013-10-21T06:18:46.267 に答える