InputStreamReader ISR = new InputStreamReader(System.in); // Вводим имя файла и преобразуем во входящий поток
BufferedReader BR = new BufferedReader(ISR); // кидаем все в буфер чтобы не брать по одному символу, а прочесть строку целиком для места хранения файла
String FileName = BR.readLine(); // читаем строку и присваиваем переменной FileName
FileInputStream FIS = new FileInputStream(FileName); // Формируем входящий поток из файла
Scanner scan = new Scanner(FIS); // почему-то не копируем в буфер, а используем класс Scanner возможно потому, что надо читать каждый символ отдельно
// таким образом открыт поток scan и его надо будет закрыть.
ArrayList<Integer> fill= new ArrayList<>(); // создаем коллекцию arrayList
while (scan.hasNext()) { // Проверяем, что пока во входящем потоке из файла есть след символ, то выполняем дальнейшую инструкцию
int data = scan.nextInt(); // переменной примитивного типа присваеваем значение из файла потока
if (data%2==0) fill.add(data); // если делится на 2 без остатка, то наполняем коллекцию
}
Collections.sort(fill); // сортируем коллекцию, так как значений не указано, то по умолчанию она сортируется по возрастанию
for (Integer x: fill) { // каждый символ х в коллекции оборачиваем в класс Integer (в этом случае он уже был таким)
System.out.println(x); // печатаем
}
scan.close(); // закрываем доступ к файлу
// а то что InputStreamReader открыт, это ничего или он не открыт?Антон Бушенев
23 уровень
Проверьте пожалуйста комментарии, все ли я правильно понимаю, что происходит в задаче
Решен
Комментарии (2)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Стас ПасинковSoftware Developer в ZipyMaster
24 сентября 2023, 19:48решение
InputStreamReader ISR = new InputStreamReader(System.in); // Вводим имя файла и преобразуем во входящий поток
я б краще сказав, шо створюємо рідер (читалку). але йому треба звідкись шось читати, і тому передаємо в якості параметру System.in щоб він читав дані із системного вводу (по факту, з клавіатури)
ім'я файлу ж вводиться пізніше (там, де створюється змінна FileName, яку варто було б назвати з маленької літери)
Scanner scan = new Scanner(FIS); // почему-то не копируем в буфер, а используем класс Scanner возможно потому, что надо читать каждый символ отдельно
не зовсім так. просто клас сканер має метод nextInt(), і тоді нам не доведеться спочатку вичитувати просто строку, а потім її окремо парсити у інт. тут же в нас ці дві дії виконуються одразу
ніякого буферу тут нема. BufferedReader ми використовували саме для читання даних з System.in. з файлу ж тут читаються дані без використання буферу.
Collections.sort(fill) можна спростити до fill.sort(). ну і сама назва колекції fill не дуже вдала, але то вже таке
for (Integer x: fill) { // каждый символ х в коллекции оборачиваем в класс Integer (в этом случае он уже был таким)
скоріше, створюємо цикл, який буде йти по колекції fill, братиме кожен її елемент і буде класти його нам у змінну х. на кожній новій ітерації циклу в нас у цій змінній буде новий елемент із колекції
// а то что InputStreamReader открыт, это ничего или он не открыт?
якщо валідатор прийняв таке рішення - значить нічого страшного.
для повної нірвани можете дописати ще й BR.close()
+2
Антон Бушенев
7 октября 2023, 12:19
Стас, спасибо большое! и к тому что некоторые переменные надо называть со строчных букв тоже прислушаюсь)
0