2 回目の繰り返しから、kb.nextLine()
名前を読み取ると\n
、ID 整数を入力するために入力された改行文字が飲み込まれます。
実際の問題は、数値トークンではないトークンをnextInt()
残すことです。他のメソッドが読み取りを試みるたびに、そのメソッドはその入力を受け取ります。メソッドは の後に戻るため、問題が発生します。char
stdin
stdin
nextLine
\n
したがって、次のようにコードを変更します。
String[] arr = new String[5];
int[] arr1 = new int[5];
Scanner kb = new Scanner(System.in);
for(int i = 0; i<5; i++)
{
System.out.println("Enter a name:");
arr[i] = kb.nextLine();
System.out.println("Enter an ID:");
arr1[i] = kb.nextInt();
kb.nextLine(); //now this swallows new line
}
または、2 つのスキャナーを使用することもできます。必要に応じて、入力を与えるような関係がないようにする必要があります...競合はまったくありません...それが効率的でないかどうかはわかりません。
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;
public class Tester {
public static void main(String[] args) throws Exception {
String[] arr = new String[5];
int[] arr1 = new int[5];
Scanner kb = new Scanner(System.in);
Scanner bc=new Scanner(System.in);
for(int i = 0; i<5; i++)
{
System.out.println("Enter a name:");
arr[i] = kb.nextLine();
System.out.println("Enter an ID:");
arr1[i] = bc.nextInt();
}}
}