0

私がやりたいのは、配列に読み込む文字列の数をユーザーに求めてから、その数の文字列を入力して配列に読み込むようにユーザーに求めることです。このコードを実行すると、最初のforループの最初のサイクルで入力を求められることはなく、「String#0:String#1:」と出力されるだけで、テキストを入力できます。それはなぜですか、そして私は何を間違えましたか?

import java.util.Scanner;

public class ovn9 
{
public static void main(String[] args)
{
    Scanner sc=new Scanner(System.in);

    System.out.print("Number of inputs: ");

    int lines= sc.nextInt();
    String[] text=new String[lines];

    for(int x=0; x<text.length; x++)
    {
        System.out.print("String #"+x+": ");
        text[x] = sc.nextLine();
    }

    for(int y=0; y<text.length; y++)
        System.out.println(text[y]);

}
}
4

2 に答える 2

4

バッファリング。

nextInt()入力数を入力したときにそこに配置された入力バッファーの改行を消費しません。forループの反復0では、バッファーに入力の行がすでにあり、nextLine()すぐに完了することができ、プログラムは反復1でのみ新しい入力行を待機します。入力の改行を無視するには、別のnextLine()呼び出しを追加します。 forループに入る前。

于 2009-11-29T12:42:28.090 に答える
0

たぶん、'sc.next()'を使用するようにループを変更する必要があります

for ( int x = 0; x < lines; x++ ) {
    System.out.print("String #" + x + ": ");
    text[x] = sc.next();
}

JavaAPIで説明できます

String next():このスキャナーから次の完全なトークンを検索して返します。

String nextLine():このスキャナーを現在の行を超えて進め、スキップされた入力を返します。

于 2009-11-29T12:44:57.433 に答える