0

私のコードは予期しない結果をもたらしています。for ループが最初の反復をスキップしているようですが、その理由がわかりません。

public static void main(String[] args) {

    Scanner get = new Scanner(System.in);
    int number;

    // Ex.1.

    String family_name;
    String[] family_array;

    System.out.println("Enter number of family members: ");
    number = get.nextInt();
    family_array = new String[number];

    for(int i = 0; i < number; i++){
        System.out.println("Enter family member name: ");
        family_name = get.nextLine();
        family_array[i] = family_name;
    }

    for(int i = 0; i < number; i++){
        System.out.println(family_array[i]);
    }

}

戻り値... (数値入力が名前であるふりをする)

Enter number of family members: 
5
Enter family member name: 
Enter family member name: 
1
Enter family member name: 
2
Enter family member name: 
3
Enter family member name: 
4

1
2
3
4

最初の get.nextLine() がスキップされるのはなぜですか?

4

5 に答える 5

5

現在、Scanner#nextIntへの呼び出しは改行文字を消費していないため、 の最初の呼び出しに渡されるため、ブロックScanner#nextLineされません。

追加する必要があります

get.nextLine();

nextIntへの最初の呼び出しが に対してnextLineブロックされるように呼び出した後IO

于 2013-02-05T18:29:04.983 に答える
3

4 と 1 の間に空白行があることに注意してください。

4
       //this is it
1

get.NextInt() を呼び出すと、行全体ではなく、次の int だけが消費されます。行の残りの空の部分は、最初のループ反復で食べられます。int を読み取った後に get.nextLine() の呼び出しを追加します。

于 2013-02-05T18:29:42.497 に答える
0

これは、まだバッファリングされたCR / LFがあるためです。したがって、最初のCR/LFは空白に設定されています。家族の名前(番号)を印刷するときは、空白行に注意してください。それはあなたの空白の家族名です。

キーボード入力はバッファリングされたストリームです。5つあり、CR / LF(または、OSによってはLFだけ)があります。

おそらく、LINEを取得してから、string.convert、atoi、system.convert(Java用のいずれか)を実行して#を取得します。

于 2013-02-05T18:35:26.150 に答える
0

私にとってうまくいったのはScanner、各反復で新しいインスタンスを作成することでした:

for(int i = 0; i < number; i++)
{
    System.out.println("Enter family member name: ");

    Scanner loopGet = new Scanner(System.in);
    family_name = loopGet.nextLine();
    family_array[i] = family_name;
}
于 2013-02-05T18:33:26.803 に答える
0
    number = get.nextInt();
     // if i enter 4 then it will 4\n and nextInt will take only 4 
     // and the \n will be taken as input by the getline.
    get.nextLine();  
     //this will return the "" from ""\n . so adding this will solve your problem
    family_array = new String[number];
于 2013-02-05T18:34:18.193 に答える