并行阵列,接受多个输入

1 java arrays

我目前正在尝试同时接受两个数组的输入.原因是阵列的每个位置处的数据是对应的,例如.姓名和身份证号码.

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();
    }
Run Code Online (Sandbox Code Playgroud)

到目前为止我有这个代码,但每当我运行它时,它会询问一个名称和ID,然后要求两者,但只接受ID.

我似乎无法弄清楚为什么它不允许输入名称,它只是返回一个不兼容的数据类型错误.

pin*_*her 5

从第二次迭代中,您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
        }
Run Code Online (Sandbox Code Playgroud)

或者你可以使用两个扫描仪:如果你想要的话应该没有任何关系,因此输入它们......没有任何冲突......我不知道这是否效率较低.

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();
        }}
}
Run Code Online (Sandbox Code Playgroud)