Округление чисел

  • 10
  • Недоступна
Считать с консоли 2 имени файла. Первый файл содержит вещественные(дробные) числа, разделенные пробелом. Например, 3.1415. Округлить числа до целых и записать через пробел во второй файл. Закрыть потоки. Принцип округления: 3.49 => 3 3.50 => 4 3.51 => 4 -3.49 => -3 -3.50 => -3 -3.51 => -4
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (113)
  • популярные
  • новые
  • старые
Для того, что бы оставить комментарий вы должны авторизоваться
Pavlic Morozov (pashok09i)20 уровень, Екатеринбург
10 января, 18:56
BufferedReader fileInputStream = new BufferedReader(new InputStreamReader(new FileInputStream(fileName1)));
BufferedWriter fileOutputStream = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileName2)));
решил с помощью таких конструкций, соответственно можно считать всю строку без цикла (по условию строка одна) и записывать так же строку. Все остальное как в предыдущем комментарии, только обошелся без true
Павел19 уровень, Москва
25 декабря 2018, 11:12
Решил через построчное чтение файла, сплит в массив итоговой строки по пробелу, дальше перебор массива с округлением Math.round и приведением в int.в переборе массива сразу добавляем в файл записи значения +пробел, не забудьте в FileOutputStream вторым параметром ставить true.
Максим18 уровень, Москва
16 декабря 2018, 14:46
я тут при решении задачи в конце написал код для вывода файла на экран, чтоб смотреть правильность записи чисел, но только валидатор не проходит, стоило это код убрать так все прошло. Странно это, ведь условия задачи были выполнены, а про вывод на экран ничего не говорилось, тогда уж написали бы что ничего лишнего быть не должно.(
denis27 уровень, Минск
7 декабря 2018, 21:04
Валидатор тут издевается по полной. Я кучу решений перепробовал и ничего. Пришлось искать подсказки тут.
Дворник19 уровень
2 декабря 2018, 14:37
Заметки: 1. Через scanner валидацию задача не прошла. 2. В одном варианте чтения из файла у меня знак разряда был ",", а не точка. 3. Кодировка только ANSI
Иван Сапронов20 уровень
12 ноября 2018, 05:00
Жаль, но я решил только со второй попытки, т.к. валидатор почему-то не принял округление с Math.rint(), ему подавай именно Math.round()....
Dinara20 уровень, Москва
15 декабря 2018, 22:44
Потому что Math.rint() округлит -3.5 до -4.0 (округляет до ближайшего целого, а если ближайших целых два, как в случае -3.5, то до четного), а по условию -3.5 должен округляться до -3. Math.round() так и работает
Vadim Krant22 уровень, Москва
22 октября 2018, 19:41
Потратил много времени на задачу. Очень много. Задачу не решил, пошёл на войну с валидатором. План работы программы: 1. Читаем влоб все байты из файла (байты читаем как чар, jvm по идее должен сразу выудить по кодировке цифры) 2. Выполняем парсинг считанного массива - ищем пробелы 3. Заполняем ArrayList данными между пробелами в виде строк 4. Парсим массив строк и вытягиваем Float 5. Округляем Float по заданию 6. Сужаем Float до int, чтобы отбросить числа после точки, т.е. делаем из 4.0 -> 4 7. Собираем строку в нужном нам формате с пробелами (3 4 4 -3 -3 -4 ) 8. Выводим строку в поток на запись Файл пишется, данные парсятся, валидатор материться от такого издевательства над ним. идилия ) upd! Задачу решил. Решение канечно странное, строгий паттерн на решение задачи Запись прошла по этому типу записи. FileWriter outpuStream = new FileWriter(path2); Другие варианты он принимать не захотел.
Дмитрий18 уровень, Санкт-Петербург
7 октября 2018, 19:00
Если вдруг кто буксует, обратите внимание, что в Java есть как сырые байтовые потоки (InputStream/OutputStream), так и символьные потоки (Reader/Writer).
Александр Толкачёв22 уровень, Санкт-Петербург
14 сентября 2018, 21:41
Для тех, кто ищет легкие пути - решение со Scanner и FileWriter не работает :(
Александр Толкачёв22 уровень, Санкт-Петербург
27 сентября 2018, 20:21
Чудеса валидатора. Хотя не исключаю своей ошибки, но уже не проверить
Tizor331 уровень
11 августа 2018, 16:21
Уже не столько решение задач, сколько борьба с валидатором... Может не такое лакончиное решение, но тем не менее. В IDEA работает, а другого и не надо. PrintWriter напрямую записывает число в файл, без всякого конвертирования в US-ASCII.
public static void main(String[] args) throws Exception {
       BufferedReader RD = new BufferedReader(new InputStreamReader(System.in));
       String r = RD.readLine();//f2 test
       String t = RD.readLine();//f1 test2
       FileInputStream f2 = new FileInputStream(r);
       FileOutputStream f1 = new FileOutputStream(t);
       RD.close();
       PrintWriter pw = new PrintWriter(t);
       byte[] b = new byte[f2.available()];//test

       while (f2.available() > 0) {//test
           f2.read(b);}

       String s = new String(b, "US-ASCII");
       String[] d = s.split(" ");

       for (int i = 0; i < d.length; i++) {
           float a = Float.parseFloat(d[i]);
           int y = Math.round(a);
           pw.print(y +" ");
          }
      f1.close();
      f2.close();
       pw.close();}}
Anastasiia20 уровень
30 сентября 2018, 02:11
спасибо за подсказку, я так понимаю, что FileOutputStream f1 = new FileOutputStream(t); в таком случае лишний