質問

この質問にはすでに答えがあります:

次のコードを取得しました。

        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
役に立ちましたか?

解決

の代わりに:

in.next();

使用します。

in.nextLine();
それは改行文字nextLine()を見つけるまで

'\n'は文字を読み込み

他のヒント

それは空白で区切り文字を、遭遇したときに読み取りを停止する .next。代わりにnextLineメソッドを使用します。

あなたの初期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();
}
...

使用してみてください。

System.out.println()

の代わりに:

System.out.print()
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top