Получение ввода от 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());
}
}
}
Ответы
Ответ 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
.