3.49 3.50 3.51 -3.49 -3.50 -3.51 2 -2 2.78 - это то, что записано в 1 файле
[3, 4, 4, -3, -3, -4, 2, -2, 3] - это то, что записывается во второй
Маленькая ремарка: первоначально затупил и сделал округление отрицательного числа по принципу "число после точки больше пяти - это минус 1 к целому числу, а число после точки меньше или равно пяти - это просто целое число до точки" - в этом случае валидатор не принимал только один пункт касательно несоответствия условию округления чисел. После того, как я добавил в последний if еще кучу if'ов, валидатор решил не принимать все пункты, кроме первого, хотя я не менял код нигде, кроме метода sort().
Задачу тестил с помощью файлов с разными числами, вроде все ок работает.
P.S. 100% есть варианты написания этой задачи попроще, но я, к сожалению, до них не додумался, заранее извиняюсь за плохую читаемость)
package com.javarush.task.task18.task1820;
/*
Округление чисел
*/
import java.io.*;
import java.util.ArrayList;
public class Solution {
public static void main(String[] args) throws Exception {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String fileName1 = reader.readLine();
String fileName2 = reader.readLine();
reader.close();
BufferedReader reader1 = new BufferedReader(new FileReader(fileName1));
String allData = reader1.readLine();
System.out.println(allData);
ArrayList<Integer> list1 = sort(allData);
System.out.println(list1);
reader1.close();
BufferedWriter writer2 = new BufferedWriter(new FileWriter(fileName2, true));
for(Integer i : list1){
String ii = i+"";
writer2.write(ii);
writer2.write(" ");
}
writer2.close();
}
public static ArrayList<Integer> sort(String allData) {
String delimetr = " ";
String[] strings = allData.split(delimetr);
ArrayList<Integer> listofint = new ArrayList<>();
for (String s : strings) {
int index = s.indexOf('.');
char[] stringsArray = s.toCharArray();
boolean b = stringsArray[0] == '-';
if (index == -1) {
int i = Integer.parseInt(s);
listofint.add(i);
//System.out.println(index + " " + s + " " + b);
} else if (Integer.parseInt(String.valueOf(stringsArray[index + 1])) < 5 && b) {
int i = Integer.parseInt(s.substring(0, index));
//System.out.println(i);
listofint.add(i);
} else if (Integer.parseInt(String.valueOf(stringsArray[index + 1])) < 5 && !b) {
int i = Integer.parseInt(s.substring(0, index));
//System.out.println(i);
listofint.add(i);
} else if (Integer.parseInt(String.valueOf(stringsArray[index + 1])) >= 5 && !b) {
int i = Integer.parseInt(s.substring(0, index));
//System.out.println(i);
listofint.add(i + 1);
} else if (Integer.parseInt(String.valueOf(stringsArray[index + 1])) >= 5 && b) {
if (Integer.parseInt(String.valueOf(stringsArray[index + 2])) > 0) {
int i = Integer.parseInt(s.substring(0, index)) - 1;
//System.out.println(i);
listofint.add(i);
} else if (Integer.parseInt(String.valueOf(stringsArray[index + 2])) == 0) {
//System.out.println(e.getClass().getSimpleName());
int i = Integer.parseInt(s.substring(0, index));
//System.out.println(i);
listofint.add(i);
} else {
int i = Integer.parseInt(s.substring(0, index));
//System.out.println(i);
listofint.add(i);
}
}
}
return listofint;
}
}