Протестировал всё, что знал сам. На пустой файл выводит пустоту, на файл с нечетными тоже ничего не пишет.
Почитав комментарии, я понял, что есть способы проще. Но меня они пока что не устраивают, поскольку интересно сдать именно этот код. Код и задача прикреплены.
package com.javarush.task.task13.task1326;
/*
Сортировка четных чисел из файла
*/
import java.io.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Solution {
public static void main(String[] args) throws IOException {
// напишите тут ваш код
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String fileName = reader.readLine(); //считали имя файла
reader.close(); //закрыли поток чтения с консоли
InputStream in = new FileInputStream(fileName); //открыли поток чтения из файла
List<Integer> list = new ArrayList<>(); //массив, в который будут записываться только четные числа
List<Integer> num = new ArrayList<>(); //массив, в который будут записываться только
while (in.available() > 0) { //пока можем читать
char c = (char) in.read(); //считываем символ
if (!(c > 47 && c < 58)) { //если это не число, то
int i = num.size() - 1; //получаем кол-во чисел в этом числе - 1
if (i != -1) { //если массив не пустой, то
int ans = 0; //в эту переменную запишем число
for (int j = 0; j < num.size(); j++) { //проходимся по массиву
int k = num.get(j); //в k пишем текущую цифру
ans += k * (int) Math.pow(10, i); //домножаем её на 10 в нужной степени
i--; //уменшаем степень для следующего числа
}
if (ans % 2 == 0) { //проверяем получившееся число на четность
list.add(ans); //если четное, то добавляем в существующий итоговый массив
}
num = new ArrayList<>(); //обнуляем массив цифр
}
} else { //если считанный символ - цифра (от 48 до 57), то
num.add((int) c - 48); //довавляем его в виде числа в массив num
}
}
int i = num.size() - 1; //проделываем 25-35 строки (перевод массива цифр в число)
if (i != -1) { // для того, что сейчас хранится в массиве, если там что-то есть
int ans = 0;
for (int k : num) {
ans += k * (int) Math.pow(10, i);
i--;
}
if (ans % 2 == 0) {
list.add(ans);
}
}
in.close(); //закрываем поток чтения из файла
if (list.size() == 0){ //если чисел в массиве нет, то завершаем программу
return;
}
Collections.sort(list); //сортируем встроенным методом, поскольку мой вариант отказался работать на один из тестов
// Object[] mas = list.toArray();
// for (int j = 0; j < mas.length; j++) {
// for (int k = j; j < mas.length; j++) {
// if ((Integer)mas[k] >(Integer) mas[j]) {
// Integer l = (Integer)mas[j];
// mas[j] = mas[k];
// mas[k] = l;
// }
// }
// }
// for (Object k:mas) {
// System.out.println(k);
// }
for (int j = 0; j < list.size(); j++) { //выводим результат на экран
System.out.println(list.get(j));
}
}
}
package com.javarush.task.task13.task1326;
/*
Сортировка четных чисел из файла
*/
import java.io.*;
import java.util.ArrayList;
import java.util.List;
public class Solution {
public static void main(String[] args) throws IOException {
// напишите тут ваш код
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String fileName = reader.readLine();
reader.close();
InputStream in = new FileInputStream(fileName);
List<Integer> list = new ArrayList<>();
List<Integer> num = new ArrayList<>();
while (in.available() > 0) {
char c = (char) in.read();
if (!(c > 47 && c < 59)) {
int i = num.size() - 1;
if (i != -1) {
int ans = 0;
for (int k : num) {
ans += k * (int) Math.pow(10, i);
i--;
}
if (ans % 2 == 0) {
list.add(ans);
}
num = new ArrayList<>();
}
} else {
num.add((int) c - 48);
}
}
int i = num.size() - 1;
if (i != -1) {
int ans = 0;
for (int k : num) {
ans += k * (int) Math.pow(10, i);
i--;
}
if (ans % 2 == 0) {
list.add(ans);
}
}
reader.close();
in.close();
if (list.size() == 0){
return;
}
Object[] mas = list.toArray();
for (int j = 0; j < mas.length; j++) {
for (int k = j; j < mas.length; j++) {
if ((Integer)mas[k] >(Integer) mas[j]) {
Integer l = (Integer)mas[j];
mas[j] = mas[k];
mas[k] = l;
}
}
}
// for (Object k:mas) {
// System.out.println(k);
// }
for (int j = 0; j < mas.length-1; j++) {
System.out.println(mas[j]);
}
System.out.print(mas[mas.length-1]);
}
}