package com.javarush.test.level18.lesson10.home05;
/* Округление чисел
Считать с консоли 2 имени файла
Первый файл содержит вещественные(дробные) числа, разделенные пробелом. Например, 3.1415
Округлить числа до целых и записать через пробел во второй файл
Закрыть потоки. Не использовать try-with-resources
Принцип округления:
3.49 - 3
3.50 - 4
3.51 - 4
-3.49 - -3
-3.50 - -3
-3.51 - -4
*/
import java.io.*;
import java.util.ArrayList;
import java.util.StringTokenizer;
public class Solution {
public static void main(String[] args) throws IOException
{
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String inputFile = reader.readLine();
String outputFile = reader.readLine();
BufferedReader stringReader = new BufferedReader(new InputStreamReader(new FileInputStream(inputFile)));
String line = stringReader.readLine();
ArrayList<Double> list = new ArrayList<>();
StringTokenizer st = new StringTokenizer(line, " ");
while(st.hasMoreTokens()) list.add(Double.parseDouble((st.nextToken())));
int[] integers = new int[list.size()];
int i = 0;
for (Double aDouble : list) {
if (aDouble > 0) integers[i++] = round1(aDouble);
else if (aDouble < 0) integers[i++] = round2(aDouble);
else integers[i++] = 0;
}
StringBuilder builder = new StringBuilder();
for (int integer : integers) {
builder.append(integer);
builder.append(" ");
}
String x = builder.toString().trim();
File file = new File(outputFile);
FileWriter fr = new FileWriter(file);
fr.write(x); //без закрытия этого потока файл не запишется
fr.close();
reader.close();
stringReader.close();
}
private static int round1(Double aDouble) {
double x = aDouble;
if ((int) (x + 0.5) == (int) x) return (int) x;
else return (int) ++x;
}
private static int round2(Double aDouble) {
double x = aDouble;
if ((int) (x - 0.49) == (int) x) return (int) x;
else return (int) --x;
}
}
Leave A Comment