从第二次迭代开始kb.nextLine()
,读取 name 的您会吞下输入的\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
}
或者您可以使用两个扫描仪:如果您想要输入它们不应该有这样的关系......根本没有冲突......我不知道这是否效率较低。
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();
}}
}