Как исправить java.util.NoSuchElementException - PullRequest
0 голосов
/ 02 мая 2019

Я делаю домашнюю работу и вводю значения через консоль, используя.Программа еще не почти закончена, и я просто пытаюсь заставить систему ввода работать.Я столкнулся с проблемой, когда я видел, как другие люди сталкивались с другими частями кода, но я не знаю, как реализовать их в этом контексте.

Он вводится в следующем формате: 4 - числострок данных 5 6 - Datapeices 5 6 - Datapeices 5 6 - Datapeices 5 6 - Datapeices

Я пытаюсь создать массив с длиной строки 1 * 2 и приступить к сохранению этого в массиве.Все остальные данные я иду по линии.

import java.io. *;

import java.util.StringTokenizer;

    int arr[];
    int x = 0;

    BufferedReader br = new BufferedReader(newInputStreamReader(System.in));
    StringTokenizer st = new StringTokenizer(br.readLine());
    arr = new int [Integer.parseInt(st.nextToken())*2];

    for (int i = 0; i < arr.length; i++) {
        if ((i%2)==1) {
            x = Integer.parseInt(st.nextToken());
            st = new StringTokenizer(br.readLine());
        } else {
            x = Integer.parseInt(st.nextToken());
        }
        arr[i] = x;
    }
    System.out.println(arr.toString());
}

1 Ответ

0 голосов
/ 02 мая 2019

Я вижу 3 проблемы в коде:

  1. Вы пытаетесь инициализировать массив странного размера.new int [Integer.parseInt(st.nextToken())*2] -> new int [st.countTokens()]

  2. В случае возникновения условия вы пытаетесь прочитать строку вложения из консоли, и она может быть пустой.Но вы пытаетесь прочитать следующий токен, когда токенов нет.И проблема в st = new StringTokenizer(br.readLine()); - поэтому необходимо добавить проверку: st.hasMoreTokens().Вы можете поместить его в оператор for.

  3. Как я полагаю, вы хотите печатать содержимое массива с помощью toString () - это не работает так, как вы ожидаете.Используйте System.out.println(Arrays.toString(arr));

...