28

我得到以下代码:

int nnames;
String names[];

System.out.print("How many names are you going to save: ");
Scanner in = new Scanner(System.in);
nnames = in.nextInt();
names = new String[nnames];

for (int i = 0; i < names.length; i++){
  System.out.print("Type a name: ");
  names[i] = in.nextLine();
}

该代码的输出如下:

How many names are you going to save:3 
Type a name: Type a name: John Doe
Type a name: John Lennon

注意它是如何跳过名字条目的?它跳过它,直接进入第二个名称条目。我已经尝试寻找导致这种情况的原因,但我似乎无法确定它。我希望有一个人可以帮助我。谢谢

4

5 回答 5

26

错误的原因是 nextInt 只提取整数,而不是换行符。如果您在 for 循环之前添加一个 in.nextLine() ,它将吃掉空的新行并允许您输入 3 个名称。

int nnames;
String names[];

System.out.print("How many names are you going to save: ");
Scanner in = new Scanner(System.in);
nnames = in.nextInt();

names = new String[nnames];
in.nextLine();
for (int i = 0; i < names.length; i++){
        System.out.print("Type a name: ");
        names[i] = in.nextLine();
}

或者只是读取该行并将值解析为整数。

int nnames;
String names[];

System.out.print("How many names are you going to save: ");
Scanner in = new Scanner(System.in);
nnames = Integer.parseInt(in.nextLine().trim());

names = new String[nnames];
for (int i = 0; i < names.length; i++){
        System.out.print("Type a name: ");
        names[i] = in.nextLine();
}
于 2009-09-23T14:48:30.923 回答
7

使用 sc.nextLine(); 两次,以便我们可以读取字符串的最后一行

sc.nextLine() sc.nextLine()

于 2017-01-31T12:14:31.583 回答
2

这是因为 in.nextInt() 没有换行。所以你首先“输入”(在你按下 3 之后)导致你的 in.nextLine() 在你的循环中读取 endOfLine 。

您可以在这里做一个小改动:

int nnames;
    String names[];

    System.out.print("How many names are you going to save: ");
    Scanner in = new Scanner(System.in);
    nnames = Integer.parseInt(in.nextLine());
    names = new String[nnames];

    for (int i = 0; i < names.length; i++){
            System.out.print("Type a name: ");
            names[i] = in.nextLine();
    }
于 2009-09-23T14:51:44.223 回答
2

这是因为 in.nextInt() 只接收一个 int 数字,不接收一个新行。所以你输入 3 并按“Enter”,行尾由 in.nextline() 读取。

这是我的代码:

int nnames;
String names[];

System.out.print("How many names are you going to save: ");
Scanner in = new Scanner(System.in);
nnames = in.nextInt();
in.nextLine();
names = new String[nnames];

for (int i = 0; i < names.length; i++){
        System.out.print("Type a name: ");
        names[i] = in.nextLine();
}
于 2013-12-20T04:54:46.443 回答
0

你可以简单地替换

names[i] = in.nextLine();names[i] = in.next();

使用 next() 只会返回空格之前的内容。nextLine() 返回当前行后自动向下移动扫描仪。

于 2015-08-27T06:25:55.060 回答