の標準入力から入力を取得したい
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());
}
}
}
それは状態に関係しています。
in.hasNextInt()
ループを続け、3回繰り返した後、「i」値が4に等しくなり、testCases [4]がArrayIndexOutOfBoundExceptionをスローします。
これを行うためのソリューションは
for (int i = 0; i < testNum; i++) {
*//do something*
}
Whileを更新して、次のように目的の番号のみを読み取ります。
while(i < testNum && in.hasNextInt()) {
追加条件&& i < testNum
に追加されたwhile
は、配列サイズに相当する数値を読み取ると、数値の読み取りを停止します。それ以外の場合は、定義されなくなり、数値配列ArrayIndexOutOfBoundException
がいっぱいになるとtestCases
になりますすなわち、testNum
の数字で読み終わっています。