我正试图提示用户键入一个字符串,该字符串将存储在字符串数组中,然后输入一个int并将其放入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数组输入String。
请帮助。
答案 0 :(得分:1)
像这样放置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();
}
答案 1 :(得分:1)
此问题是由于nextInt()
方法引起的。
这里发生的是,nextInt()
方法使用了用户输入的整数,但没有使用按 enter 键时创建的用户输入末尾的换行符。
因此,当您输入整数后按 enter 时,对nextLine()
的下一次调用将消耗换行符,而{{1}在循环的最后一次迭代中不会使用该换行符} 方法。这就是为什么它在循环的下一个迭代中跳过nextInt()
的输入,而不等待用户输入String
的原因
解决方案
可以通过调用消耗新行字符String
的{{1}}呼叫之后
nextLine()
答案 2 :(得分:0)
使用 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();
}