4

我得到以下代码:

        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.next();
    }

    System.out.println(names[0]);

当我运行此代码时,扫描仪只会拾取名字而不是姓氏。有时它会在尝试输入名称时跳过一行,它会显示为好像我将名称留空并跳到下一个名称。我不知道这是什么原因造成的。

我希望有一个人可以帮助我!

编辑:我试过 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

4 回答 4

8

代替:

in.next();

利用:

in.nextLine();

nextLine()读取字符直到找到换行符'\n'

于 2009-09-23T13:31:26.480 回答
3

在您最初的 nextInt() 之后,您的输入中仍然有一个空的换行符。所以只需在你的 nextInt() 之后添加一个 nextLine(),然后进入你的循环:

...
Scanner in = new Scanner(System.in);
nnames = in.nextInt();
in.nextLine(); // gets rid of the newline after number-of-names
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:39:22.003 回答
2

Scanner.next在遇到分隔符(即空格)时停止读取。请改用该nextLine方法。

于 2009-09-23T13:31:26.463 回答
-1

尝试使用:

System.out.println()

代替:

System.out.print()
于 2014-04-16T19:11:42.677 回答