3

これが私が簡単なゲームを作るために書いているいくつかの基本的なコードの骨組みです:

    Scanner in = new Scanner(System.in);

    String name;
    String playing;
    int age;

    do {

        System.out.println("Enter your name");
        name = in.nextLine();

        System.out.println("Enter your age");
        age = in.nextInt();

        System.out.println("Play again?");
        playing = in.nextLine();

    } while (true);

コードは期待どおりに機能しません。たとえば、コードの期待される機能は次のとおりです。

Enter your name
John
Enter your age
20
Play again?
Yes
Enter your name
Bill
...

ただし、Playagain行の読み取りに問題があります。これが実際の出力です。

Enter your name
John
Enter your age
20
Play again?
Enter your name

ご覧のとおり、「もう一度再生しますか?」の前に「名前を入力してください」が再度表示されます。入力を受け入れることができます。再生変数をデバッグするときは「」に設定されているため、表示できる入力がなく、何が消費されているのかわかりません。助けていただければ幸いです、ありがとう!

4

4 に答える 4

5

nextInt()intそこにあるのが唯一のものであっても、行末を消費しません。

nextLine()を読んだ後に別の値を追加intし、その値を完全に破棄するか、int以外のものを入力できないようにする場合は、値が空であることを確認します。

于 2012-05-06T06:02:47.707 に答える
3

問題は、nextInt()を呼び出した後も、バッファに'\ n'が残っているため、それが渡されることです。in.nextLine()の代わりにin.next()を使用します。

于 2012-05-06T06:03:10.740 に答える
0

次の行の読み取りには、次のコードを使用する必要があります。

Scanner scanner = new Scanner(System.in).useDelimiter("\n");

そしてその行を読むためにあなたは書くべきです

scanner.next();
于 2012-05-06T06:24:02.873 に答える
0

nextLine()メソッドの代わりにScannerクラスのnext()メソッドを使用します。

    Scanner in = new Scanner(System.in);

    String name;
    String playing;
    int age;

    do {

        System.out.println("Enter your name");
        name = in.next();

        System.out.println("Enter your age");
        age = in.nextInt();

        System.out.println("Play again?");
        playing = in.next();

    } while (true);

詳細については、ScannerクラスのJavaドキュメントを参照してください 。

Enter your name
Kanishka
Enter your age
23
Play again?
Yes
Enter your name
....
于 2012-05-06T05:59:30.740 に答える