Подтвердить что ты не робот

Получение ввода от stdin

Я хочу получить вход от stdin в for

3
10 20 30

первое число - это количество чисел во второй строке. Вот что я получил, но он застрял в цикле 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());               
       }

   } 

} 
4b9b3361

Ответ 1

Это связано с условием.

in.hasNextInt()

Он позволяет вам продолжать цикл, а затем после того, как три итерации "i" значение равно 4, а testCases [4] выбрасывает ArrayIndexOutOfBoundException.

Решение сделать это может быть

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

Ответ 2

Обновите свое время, чтобы читать только нужные номера, как показано ниже:

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

Дополнительное условие && i < testNum, добавленное в while, перестанет считывать числа после того, как вы прочитаете числа, эквивалентные размеру вашего массива, в противном случае он будет исчезать неопределенно, и вы получите ArrayIndexOutOfBoundException, когда числовой массив testCases равен полный, т.е. вы закончили чтение с номерами testNum.