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

このコードを実行すると、スキャナーは名のみを取得し、姓は取得しません。また、名前を入力しようとすると1行スキップすることがあり、名前を空白のままにして次の名前にスキップしたかのように表示されます。何が原因なのかわかりません。

誰かが私を助けてくれることを願っています!

編集:私は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 に答える