Java中的迭代器

3

我遇到了一个在Java中难以理解的异常情况。

在我的主类中,我有以下代码:

(import java.util.*;)
...

Scanner input = new Scanner(System.in);

String name;
int i = 1;

System.out.println("How many names do you want to enter?");
int iteratorCount = input.nextInt();
iteratorCount++;

  while (i < iteratorCount){
  System.out.println("Ener name number "+i);
  name = input.nextLine();
  System.out.println(name);
  i++;
  }

但是在 while 循环的第一次迭代中,我没有被要求输入一个名称。然而,“输入第一个名称”文本确实出现了。以下是输出:

How many names do you want to enter?
>>5
Ener name number 1

Ener name number 2
>>Jack
Jack
Ener name number 3
>>John
John
Ener name number 4
>>Lisa
Lisa
Ener name number 5
>>Paul
Paul

这是为什么发生的,有人能解释一下吗?其中>>表示用户输入的文本。

1个回答

6

Scanner#nextInt 不会 读取 '\n' 字符(即在输入int后按下的回车键),场景:

>>> How many names do you want to enter?
>>> 5 (and hit enter)
>>> Enter name number 
>>> \n (consumed)
>>> 

解决方案:
  • nextInt 后面再放置一个 nextLine,以便消耗该字符
  • (不建议,但可能有助于理解问题)创建另一个 Scanner 实例

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接