我试图提示用户输入一个字符串,该字符串将存储在字符串数组中,然后输入一个输入的int,该字符串将被放入int数组中。
我遇到了打印第一行的问题,但没有提示用户键入字符串。然后立即打印第二个 print 语句,用户只能键入 int。
到目前为止,我有:
int i, n = 10;
String[] sentence = new String[1000];
int[] numbers = new int[1000];
for(i = 0; i < n; i++)
{
System.out.println("Enter String" + (i + 1) + ":");
sentence[i] = scan.nextLine();
System.out.printf("Enter int " + (i + 1) + ":");
numbers[i] = scan.nextInt();
}
作为输出,我得到:
Enter String 1:
Enter int 1:
在这里你可以输入一个 int,它被存储在 int 数组中。但是,您不能为 String 数组输入字符串。
请帮忙。
此问题是由于nextInt()
方法引起的。
这里发生的事情是nextInt()
方法使用用户输入的整数,但不使用按 Enter 键时创建的用户输入末尾的新行字符。
因此,当您在输入整数后按 Enter 时,下次调用 nextLine()
将使用在循环的最后一次迭代中未使用的换行符 nextInt()
方法。这就是为什么它在循环的下一次迭代中跳过String
的输入,并且不等待用户输入String
溶液
您可以通过在nextInt()
调用后调用nextLine()
来使用换行符
for(i = 0; i < n; i++)
{
System.out.println("Enter String" + (i + 1) + ":");
sentence[i] = scan.nextLine();
System.out.printf("Enter int " + (i + 1) + ":");
numbers[i] = scan.nextInt();
scan.nextLine(); // <------ this call will consume the new line character
}
像这样放置 scan.nextLine():
for(i = 0; i < n; i++){
System.out.println("Enter String" + (i + 1) + ":");
sentence[i] = scan.nextLine();
System.out.printf("Enter int " + (i + 1) + ":");
numbers[i] = scan.nextInt();
scan.nextLine();
}
如果不能在第一次迭代中输入字符串值,请使用 sc.next(); 而不是 sc.nextLine()。
Scanner sc = new Scanner(System.in);
for(i = 0; i < n; i++);
System.out.println("Enter String" + (i + 1) + ":");
sentence[i] = sc.next();
System.out.printf("Enter int " + (i + 1) + ":");
numbers[i] = sc.nextInt();
sc.nextLine();
}