このforループが最初のサイクルでテキストを入力できないのはなぜですか?
-
06-07-2019 - |
質問
私がしたいことは、配列に読み込む文字列の数をユーザーに求め、その数の文字列を入力して配列に読み込むようにユーザーに求めることです。このコードを実行すると、最初の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]);
}
}
解決
バッファリング。
nextInt()
は、入力数を入力したときにそこに置かれた入力バッファーの改行を消費しません。 forループの反復0では、バッファーに既に入力行があり、 nextLine()
はすぐに完了し、プログラムは反復1でのみ新しい入力行を待機します。改行を無視するには入力では、forループに入る前に別の nextLine()
呼び出しを追加できます。
他のヒント
「sc.next()」を使用するようにループを変更する必要があるかもしれません
for ( int x = 0; x < lines; x++ ) {
System.out.print("String #" + x + ": ");
text[x] = sc.next();
}
Java APIで説明できます
String next():このスキャナーから次の完全なトークンを検索して返します。
String nextLine():現在の行を過ぎてこのスキャナーを進め、スキップされた入力を返します。
所属していません StackOverflow