14

for の stdin から入力を取得したい

3
10 20 30

最初の数値は、2 行目の数値の量です。ここに私が得たものがありますが、それはwhileループでスタックしています...だから私は信じています。デバッグモードで実行しましたが、配列に値が割り当てられません...

import java.util.*;

public class Tester {   

   public static void main (String[] args)
   {

       int testNum;
       int[] testCases;

       Scanner in = new Scanner(System.in);

       System.out.println("Enter test number");
       testNum = in.nextInt();

       testCases = new int[testNum];

       int i = 0;

       while(in.hasNextInt()) {
           testCases[i] = in.nextInt();
           i++;
       }

       for(Integer t : testCases) {
           if(t != null)
               System.out.println(t.toString());               
       }

   } 

} 
4

2 に答える 2

10

それは条件に関係しています。

in.hasNextInt()

ループを続け、3 回繰り返した後、「i」の値が 4 になり、testCases[4] が ArrayIndexOutOfBoundException をスローします。

これを行うための解決策は

for (int i = 0; i < testNum; i++) {
 *//do something*
}
于 2012-10-27T00:21:42.923 に答える
2

while を更新して、以下のように必要な数値のみを読み取ります。

      while(i < testNum && in.hasNextInt()) {

&& i < testNum追加された追加の条件whileは、配列サイズに相当する数値を読み取ると数値の読み取りを停止します。それ以外の場合は不確定になりArrayIndexOutOfBoundException、数値配列testCasesがいっぱいになったときに取得されます。つまり、testNum数値の読み取りが完了します。

于 2012-10-27T00:22:04.103 に答える