我目前正在尝试同时接受两个数组的输入.原因是阵列的每个位置处的数据是对应的,例如.姓名和身份证号码.
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.
我似乎无法弄清楚为什么它不允许输入名称,它只是返回一个不兼容的数据类型错误.
从第二次迭代中,您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)