Подсчет и сброс сканера

Я любитель Java и пытаюсь поместить содержимое сканера в массив. Это то, что у меня есть на данный момент: `

public static void main(String args[])
    { 
        Scanner sc = new Scanner(System.in);
        int l = scannerLength(sc);
        sc.close(); sc = null; sc = new Scanner(System.in);
        int[] input = new int[l];
        for (int i = 0; i < l; i++) {
            input[i] = sc.nextInt();
            System.out.println(input[i]);
        }
    }


private static int scannerLength(Scanner sc) {
    int output = 0;
    while(sc.hasNextInt()) {
        output++;
        sc.nextInt();
    }
    return output;
}
`

Я пытаюсь эффективно «сбросить» сканер после того, как моя вспомогательная функция определяет его длину, аннулируя его и объявляя заново, поэтому я могу использовать nextInt для помещения элементов в массив. Но я получаю исключение NoSuchElementException в строке 8.

Кто-нибудь может сказать мне, почему это так? Я бы подумал, что после сброса сканера sc.nextInt() в строке 8 не создаст проблем.


person BCD    schedule 11.02.2017    source источник
comment
см. это: stackoverflow.com/questions/8203981/ почти уверен, что вы не можете закрыть system.in вот так   -  person nhouser9    schedule 11.02.2017
comment
Пожалуйста, определите, что вы считаете длиной сканера   -  person Nir Alfasi    schedule 11.02.2017
comment
Возможный дубликат java.util.NoSuchElementException - Сканер читает пользовательский ввод   -  person Tom    schedule 11.02.2017
comment
System.in гарантированно будет последовательностью целых чисел, поэтому длина сканера — это количество целых чисел во входном потоке. Мне удалось найти обходной путь, используя ссылку, которую опубликовал Том. Благодарю вас!   -  person BCD    schedule 13.02.2017