2016-11-22 3 views
0

私はクラスの問題のためにコンソールからの整数である入力の複数行を取得する必要があります。これまで私はスキャナを使用していましたが、解決策はありません。入力は、n行で構成されます。入力は整数で始まり、その後に一連の整数の行が続きます。これは何度も繰り返されます。ユーザーが0を入力すると、入力が停止します。例えばJavaのコンソールから複数の行を読む

入力:

3 
3 2 1 
4 
4 2 1 3 
0 

だから、私は、この一連の線および可能な店舗スキャナオブジェクトを使用して、配列の要素として各ラインを読むことができる方法は?これまで私が試してみました:

Scanner scan = new Scanner(System.in); 
    //while(scan.nextInt() != 0) 
    int counter = 0; 
    String[] input = new String[10]; 

    while(scan.nextInt() != 0) 
    { 
     input[counter] = scan.nextLine(); 
     counter++; 
    } 
    System.out.println(Arrays.toString(input)); 
+1

あなたはこの[スキップ問題に実行されています](http://stackoverflow.com/questions/13102045/scanner-is-skipping-nextline-after-using-next-nextint-or-other-nextfoo) –

+0

2つのループが必要:量を読み取る外側のループ、その多くのintを読み取る内部ループ。両方のループの終わりに 'readLine()'が必要です。 – Bohemian

答えて

1

をあなたは各行を取得し、空白文字の上にそれを分割することにより行から整数を解析するscan.nextLine()を使用することができます。

1

2つのループが必要です。量を読み取る外側のループと、その多くのintを読み取る内側のループです。両方のループの最後にreadLine()が必要です。

Scanner scan = new Scanner(System.in); 

for (int counter = scan.nextInt(); counter > 0; counter = scan.nextInt()) { 
    scan.readLine(); // clears the newline from the input buffer after reading "counter" 
    int[] input = IntStream.generate(scan::nextInt).limit(counter).toArray(); 
    scan.readLine(); // clears the newline from the input buffer after reading the ints 
    System.out.println(Arrays.toString(input)); // do what you want with the array 
} 

エレガンス(IMHO)の場合、内部ループはストリームで実装されます。

0

mWhitleyとしてだけでこれはリストの中に、各ラインの整数を維持します

スペース文字で入力行を分割するString#splitを使用して印刷する、請求それ

Scanner scan = new Scanner(System.in); 
ArrayList integers = new ArrayList(); 

while (!scan.nextLine().equals("0")) { 
    for (String n : scan.nextLine().split(" ")) { 
     integers.add(Integer.valueOf(n)); 
    } 
} 

System.out.println((Arrays.toString(integers.toArray()))); 
関連する問題