我的代码产生了意想不到的结果。似乎我的for循环跳过了第一次迭代,我不明白为什么。
public static void main(String[] args) {
Scanner get = new Scanner(System.in);
int number;
// Ex.1.
String family_name;
String[] family_array;
System.out.println("Enter number of family members: ");
number = get.nextInt();
family_array = new String[number];
for(int i = 0; i < number; i++){
System.out.println("Enter family member name: ");
family_name = get.nextLine();
family_array[i] = family_name;
}
for(int i = 0; i < number; i++){
System.out.println(family_array[i]);
}
}
返回...(假设数字输入是名称)
Enter number of family members:
5
Enter family member name:
Enter family member name:
1
Enter family member name:
2
Enter family member name:
3
Enter family member name:
4
1
2
3
4
为什么跳过第一个get.nextLine()?
答案 0 :(得分:5)
目前,您对Scanner#nextInt的调用并未使用换行符,因此会在第一次调用Scanner#nextLine
时将其传递给您,因此它不阻止。
您需要添加
get.nextLine();
致电nextInt
后,您第一次拨打nextLine
将阻止IO
。
答案 1 :(得分:3)
请注意4和1之间的空行?
4
//this is it
1
当你调用get.NextInt()时,你不会吃整行,只是下一个int。在第一次循环迭代中吃剩下的空行。在读取int之后添加对get.nextLine()的调用。
答案 2 :(得分:0)
对我来说有用的是在每次迭代中实例化一个新的Scanner
:
for(int i = 0; i < number; i++)
{
System.out.println("Enter family member name: ");
Scanner loopGet = new Scanner(System.in);
family_name = loopGet.nextLine();
family_array[i] = family_name;
}
答案 3 :(得分:0)
number = get.nextInt();
// if i enter 4 then it will 4\n and nextInt will take only 4
// and the \n will be taken as input by the getline.
get.nextLine();
//this will return the "" from ""\n . so adding this will solve your problem
family_array = new String[number];
答案 4 :(得分:0)
我要说这是因为你还有一个缓冲的CR / LF - 所以第一个被设置为空白。在打印姓氏(数字)时请注意空白行。那是你的空白姓氏。
键盘输入是一个缓冲流 - 它有你的5,它有一个CR / LF(或者只是一个LF,取决于你的操作系统)。
您可能想要获取LINE然后执行string.convert,atoi,system.convert(无论哪个是Java)来获取#。