Почему я постоянно получаю исключение java.lang.NumberFormatException, хотя оно правильно компилируется?

Я постоянно получаю NumberFormatException за свою строку, и я не знаю, почему. Кажется, что при компиляции он работает нормально, и я не могу понять, что не так с кодом, из-за которого он не запускается.

Вот скриншот того, что показывает.

https://imgur.com/a/LfM5SDA

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

public static int loadArray(int[] numbers) {
        System.out.print("Enter the file name: ");
        String fileName = keyboard.nextLine();
        File file = new File(fileName);
        BufferedReader br;
        String line;
        int index = 0;
            try {
                br = new BufferedReader(new FileReader(file));
                while ((line = br.readLine()) != null) {
                    numbers[index++] = Integer.parseInt(line);
                    if (index > 150) {
                        System.out.println("Max read size: 150 elements. Terminating execution with status code 1.");
                        System.exit(0);
                    }
                }
            } catch (FileNotFoundException ex) {
                System.out.println("Unable to open file " + fileName + ". Terminating execution with status code 1.");
                System.exit(0);
            }catch(IOException ie){
                System.out.println("Unable to read data from file. Terminating execution with status code 1.");
                System.exit(0);
            }

            return index;
    }

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

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
66
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Проблема в том, что вы читаете всю строку.

 while ((line = br.readLine()) != null)

Вы не можете анализировать целое число на основе всей строки с пробелами.

У вас есть два варианта:

  • Прочитайте строку в до, в которой вы вызываете метод, и разделите ее пробелом, а затем передайте этот String[] в свой loadArray метод.
  • Опустите аргумент loadArray и разделите строку пробелом. Затем вы можете перебирать содержимое этого массива и при необходимости преобразовывать каждый в int.

как мне напечатать то, что вы сказали выше? Я почему-то не могу скомпилировать сейчас, когда пробовал. Спасибо за быстрый ответ!

Sam Huegen 09.04.2019 19:53
Ответ принят как подходящий

Вы получаете NumberFormatException во время работы приложения, потому что это RuntimeException, и оно предназначено для такой работы.

Проблема с вашим решением в том, что вы пытаетесь проанализировать int из всей строки в файле.

«123, 23, -2, 17» — это не одно целое число. Итак, вы должны сделать следующее: вместо numbers[index++] = Integer.parseInt(line);

String[] ints = line.split(", ");
for(i = 0; i < ints.length; i++ ){
 numbers[index++] = Integer.parseInt(ints[i]);
}

Другие вопросы по теме