web-dev-qa-db-ja.com

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());               
       }

   } 

} 
14
miatech

それは状態に関係しています。

in.hasNextInt()

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

これを行うためのソリューションは

for (int i = 0; i < testNum; i++) {
 *//do something*
}
10
LivingThing

Whileを更新して、次のように目的の番号のみを読み取ります。

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

追加条件&& i < testNumに追加されたwhileは、配列サイズに相当する数値を読み取ると、数値の読み取りを停止します。それ以外の場合は、定義されなくなり、数値配列ArrayIndexOutOfBoundExceptionがいっぱいになるとtestCasesになりますすなわち、testNumの数字で読み終わっています。

2
Yogendra Singh