JavaRush
Акция
Университет
Java FullStack
Python FullStack
new
Web FullStack
new
Обучение
Курсы
Задачи
Опросы
Игры
Помощь
График пинков
Стажировка
Сообщество
Пользователи
Форум
Чат
Статьи
Истории успеха
Активности
Отзывы
Подписки
Светлая тема
Вопрос
  • Отзывы
  • О нас
  • CS50
Начать
Начать обучение
Начать обучение
  • Все вопросы
JavaRush/Помощь по Java задачам/При тестировании получаю NumberFormatException - не пони...
Артём
28 уровень
  • 03.05.2024
  • 133просмотров
  • 4комментариев

При тестировании получаю NumberFormatException - не понимаю в чем проблема с этим кодом, хелп, плиз.

Вопрос по задаче Сортировка четных чисел из файла
Java Core,  3 уровень,  11 лекция
Решен

В этой задаче тебе нужно:

  1. Ввести имя файла с консоли.
  2. Прочитать из него набор чисел.
  3. Вывести в консоли только четные, отсортированные по возрастанию.

Пример ввода:
5
8
-2
11
3
-5
2
10

Пример вывода:
-2
2
8
10

Требования:
  • Программа должна считывать данные с консоли.
  • Программа должна создавать FileInputStream для введенной с консоли строки.
  • Программа должна выводить данные на экран.
  • Программа должна вывести на экран все четные числа, считанные из файла, отсортированные по возрастанию.
  • Программа должна закрывать поток чтения из файла — FileInputStream.
package com.javarush.task.task13.task1326; import java.io.*; import java.util.*; import java.util.stream.Stream; /* Сортировка четных чисел из файла */ //C:\Users\Артём\Desktop\test.txt public class Solution { public static void main(String[] args) { // напишите тут ваш код try (Scanner sc = new Scanner(System.in); FileInputStream reader = new FileInputStream(sc.nextLine())){ byte [] arr = reader.readAllBytes(); String [] allBytes = new String(arr).split("\n"); for (String s:allBytes) System.out.println(s); int [] result = Arrays.stream(allBytes).mapToInt(Integer::parseInt).filter(x->(x%2==0)).toArray(); Arrays.sort(result); Arrays.stream(result).forEach(System.out::println); } catch (IOException e) { throw new RuntimeException(e); } } }
0
Комментарии (4)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Денис Enterprise Java Developer
3 мая 2024, 11:42решение
Я тебе больше скажу, твой код у валидатора даже не скомпилится, потому как метода readAllBytes() не существовало в 8й Java. Перенос строки в разных системах может быть разным. В частности на винде это CRLF а не просто LF Вполне возможно что этот самый возврат каретки тебе 25ю строку и разваливает. К слову, что помешало использовать BufferedReader? То, что в условии требуется использовать FileInputStream ведь не запрещает использовать обвязку над ним.
+2
Артём
Уровень 28
Expert
3 мая 2024, 13:23
Спасибо! Перепроверил уже все, что мог - не подумал о разнице версий Решил обойтись без буфера просто, чтобы поменьше кода писать, раз есть такой хороший метод как ReadAllBytes() :)
0
Денис Enterprise Java Developer
3 мая 2024, 14:10
Не нужно пытаться писать меньше кода, пиши код так, чтобы его было удобно читать и видоизменять по необходимости. В данном конкретном примере куда проще было бы использовать BufferedReader, чтобы читать файл построчно (судя по примеру ввода, одна строка - одно число). После чего их парсить и накинуть простенькую логику по нахождению четных чисел. Что-то такое:
public static void main(String[] args) {
    List<Integer> evenNumbers = new ArrayList<>();

    Scanner scanner = new Scanner(System.in);
    String fileName = scanner.nextLine();
    try (BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(fileName)))) {
        while (reader.ready()) {
            int num = Integer.parseInt(reader.readLine());
            if (num % 2 == 0) {
                evenNumbers.add(num);
            }
        }
    } catch (IOException ignore) {
    }

    evenNumbers.stream().sorted().forEach(System.out::println);
}
+1
Артём
Уровень 28
Expert
5 мая 2024, 09:55
Так действительно удобнее читать, благодарю
0
Обучение
  • Курсы программирования
  • Регистрация
  • Курс Java
  • Помощь по задачам
  • Цены
Сообщество
  • Пользователи
  • Статьи
  • Форум
  • Чат
  • Истории успеха
  • Активности
Компания
  • О нас
  • Контакты
  • Отзывы
  • FAQ
  • Поддержка
JavaRushJavaRush — это интерактивный онлайн-курс по изучению Java-программирования c нуля. Он содержит 1200 практических задач с проверкой решения в один клик, необходимый минимум теории по основам Java и мотивирующие фишки, которые помогут пройти курс до конца: игры, опросы, интересные проекты и статьи об эффективном обучении и карьере Java‑девелопера.
Подписывайтесь
Язык интерфейса
Русский
English Українська
"Программистами не рождаются" © 2026 JavaRush
MastercardVisa
"Программистами не рождаются" © 2026 JavaRush