Java Scanner class reading strings [duplicate]

2019-02-18 07:24发布

This question already has an answer here:

I got the following code:

        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]);

When I run this code, the scanner will only pick up the first name and not the last name. And it will sometimes skip a line when trying to enter a name, it will show up as if I had left the name blank and skip to the next name. I don't know what's causing this.

I hope someone can help me!

EDIT: I have tried in.nextLine(); it fixes the complete names but it still keeps a line, here is an example of the output:

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

4条回答
我欲成王,谁敢阻挡
2楼-- · 2019-02-18 07:51

Instead of:

in.next();

Use:

in.nextLine();

nextLine() reads the characters until it finds a new line character '\n'

查看更多
Explosion°爆炸
3楼-- · 2019-02-18 07:54

Try using:

System.out.println()

Instead of:

System.out.print()
查看更多
太酷不给撩
4楼-- · 2019-02-18 07:59

Scanner.next stops reading when it encounters a delimiter, which is a whitespace. Use the nextLine method instead.

查看更多
该账号已被封号
5楼-- · 2019-02-18 07:59

After your initial nextInt(), there's still an empty newline in your input. So just add a nextLine() after your nextInt(), and then go into your loop:

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

查看更多
登录 后发表回答