11

重複の可能性:
nextInt の後に nextLine を使用する場合のスキャナーの問題

ユーザーがスキャナーを使用して配列に値を入力できるプログラムを作成しようとしています。

ただし、プログラムが学生の近親者を尋ねると、ユーザーは何も入力できず、すぐにプログラムが終了します。

以下は私が行ったコードです:

if(index!=-1)
    {
        Function.print("Enter full name: ");
        stdName = input.nextLine();

        Function.print("Enter student no.: ");
        stdNo = input.nextLine();

        Function.print("Enter age: ");
        stdAge = input.nextInt();

        Function.print("Enter next of kin: ");
        stdKin = input.nextLine();

        Student newStd = new Student(stdName, stdNo, stdAge, stdKin);
        stdDetails[index] = newStd;
    }

next(); を使用してみました。しかし、それは私が望んでいたものではないユーザー入力の最初の単語を取るだけです。とにかくこの問題を解決する方法はありますか?

4

3 に答える 3

24

\nこの問題は、改行文字である Enter キーを押すと発生します。nextInt()整数のみを消費しますが、改行をスキップします\n。この問題を回避するには、input.nextLine()を読んだ後にを追加する必要がある場合があります。int\n

Function.print("Enter age: ");
stdAge = input.nextInt();
input.nextLine();.

// rest of the code
于 2013-01-22T06:16:28.063 に答える
9

問題は、input.nextInt()この関数が int 値のみを読み取ることです。したがって、読み続けると、 「\n」キーinput.nextLine()を受け取ります。したがって、これをスキップするには、. Enterinput.nextLine()

Function.print("Enter age: ");
stdAge = input.nextInt();
input.nextLine();
Function.print("Enter next of kin: ");
stdKin = input.nextLine();

なぜnext()動作しない..?
next() は next token を返し、 nextLine() は NextLine を返します。違いがわかればいい。トークンは、空白で囲まれた非空白文字の文字列です。

ドクから

このスキャナーから次の完全なトークンを検索して返します。完全なトークンの前後には、区切り文字パターンに一致する入力が続きます。以前の hasNext() の呼び出しで true が返された場合でも、このメソッドは入力がスキャンされるのを待っている間にブロックされる場合があります。

于 2013-01-22T06:27:36.637 に答える
4

電話をinput.nextLine();かけた後input.nextInt();、行末まで読み取ります。

例:

Function.print("Enter age: ");
stdAge = input.nextInt();
input.nextLine();  //Call nextLine

Function.print("Enter next of kin: ");
stdKin = input.nextLine();
于 2013-01-22T06:17:06.433 に答える