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

  • 10
  • Недоступна
Считать с консоли 2 имени файла. Первый файл содержит вещественные(дробные) числа, разделенные пробелом. Например, 3.1415. Округлить числа до целых и записать через пробел во второй файл. Закрыть потоки. Принцип округления: 3.49 => 3 3.50 => 4 3.51 => 4 -3.49 => -3 -3.50 => -3 -3.51 => -4
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (186)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Alexander Lyukevich18 уровень, Брест
четверг, 21:11
Вах! Это что значит?
Полина22 уровень
27 ноября 2019, 15:38
кто мне объяснит, почему конструкция
Double number = Double.parseDouble(numbers[i]);
long f = Math.round(number);
int formatted = (int) f;
writer.write(formatted);
ничегошеньки не пишет в файл, а
Double number = Double.parseDouble(numbers[i]);
writer.write(Math.round(number)+" ");
- пишет?? Проще говоря, почему у меня метод write(int) не работает, а write(String) - работает?
Ildar19 уровень, Москва
четверг, 10:09
В методе write(int): int - это байты, которые переводятся в char'ы. Поэтому, если мы хотим передать число 44, нам нужно 44 передавать как стринг, иначе мы передадим символ ','
Горбачев Александр31 уровень, Москва
13 ноября 2019, 09:44
Валидатор ругается на
DecimalFormat df = new DecimalFormat("#");
, используйте
Math.round()
Aka_ron4uk19 уровень, Санкт-Петербург
15 декабря 2019, 19:32
у меня принял)
Горбачев Александр31 уровень, Москва
16 декабря 2019, 13:46
Ну может поправили..
Dehedero Dero22 уровень
1 ноября 2019, 17:29
5 попыток на эту задачу, ненавижу местный валидатор кода, пока не начал считывать весь первый файл целиком в массив байт, не принимал решение. Мерзость.
Sergey Vilkov23 уровень, Москва
18 октября 2019, 10:50
Странно но валидатор не принял (int) , но принял Math.round. Тестовый файл записывал одинково.
Alexey Yagudin25 уровень, Санкт-Петербург
24 октября 2019, 19:50
int отбрасывает дробную часть, а здесь нужно округлять до ближайшего целого.
Евгений20 уровень, Днепр
2 октября 2019, 18:26
Решил с первого раза, но ощущение, что говнокод ( 1. считал файл в массив байт 2. массив байт переписал в массив стрингов используя сплит по пробелу 3. этот массив сложил в одну строчку, прогоняя каждый элемент через Math.round(Float.valueOf) + " " 4. строчку записал в файл через .getBytes() п.с. как правильно, массив байт или байтов??
Boarder27 уровень, Ижевск
23 октября 2019, 10:14
Решал практически также, тоже попахивает говнокодом) А всё потому что не использовал FileWriter и BufferedWriter 🙃 на FileInputStream и FileOutputStream получилось много кода в методе...
LuneFox23 уровень, Москва
24 сентября 2019, 14:17
Очередного монстра упаковал в 12 строчек)
Евгений24 уровень, Караганда
27 сентября 2019, 10:39
Браво! Не уловил правда, зачем переменная count, вроде не используется
LuneFox23 уровень, Москва
27 сентября 2019, 19:58
IDEA ругалась: "Ахтунг! Результат вашего метода никуда не сохраняется!". Я решил её немного успокоить таким образом. А по сути да, не используется. Но если бы я захотел что-то записать в файл, то пригодилась бы.
Лев Садовский22 уровень, Краснодар
2 декабря 2019, 17:44
при таком подходе можно было и в одну строку
Stanislav19 уровень
12 января, 21:56
почему этот код не работает и выдает ошибку в parseDoble NomberFormatException если в файле числа записаны так "1,49" а не так "1.49" то есть когда запятая код не работает и как с этим бороться в данном примере решения??
RexyComandante22 уровень, Минск
18 сентября 2019, 19:01
Хорошая задача, пришлось поломать голову как решить.
gangmaster19 уровень
4 сентября 2019, 12:17
Не мог понять, почему валидатор не пропускает мое решение, а все из за того, что в первом файле у меня были цыфры в столбик, а не Первый файл содержит вещественные(дробные) числа, разделенные пробелом - то есть это одна строка ;) Как только понял свой косяк, решил без проблем.
Павел Минеев41 уровень, Челябинск
27 августа 2019, 16:39
Простая задача - никаких боданий с валидатором. 1. Считал файл BufferedReader-ом в одну строку.
reader = new BufferedReader(new FileReader(fileName1));
String num = reader.readLine();
2. Разбил строку на массив строк методом split(" ")
String[] nums = num.split(" ");
3. Совместил парсинг, округление и запись одним циклом:
BufferedWriter writer = new BufferedWriter(new FileWriter(fileName2));
for (int i = 0; i < nums.length; i++) {
        writer.write(Math.round(Double.parseDouble(nums[i]))+" ");
}
4. Закрыл потоки.
VDT20 уровень, Екатеринбург
18 сентября 2019, 08:06
Говорила мне мама "Учи синтаксис!", "Не забывай про алгоритмы".... Как у меня из головы "split" выскочил ... хз
Полина22 уровень
27 ноября 2019, 15:36
спасибо. пыталась делать с помощью BufferedOutputStream, но как-то не сложилось))
Nazim20 уровень, Москва
2 декабря 2019, 17:09
пока что лучший вариант у Павла
Mike26 уровень, Новосибирск
7 декабря 2019, 03:19
Это да, большинство задач этого уровня легче бы решались с FIleReader и FileWriter, но я так понимаю что уметь работать с байтами достаточно важно, поэтому нам и предлагают решить эту кучу задач с помощью FileInputStream и FileOutputStream. Решать эти задачи через них явно не оптимально (особенно с учетом что по сути нас пока учат работать на этом уровне только с байтами по таблице ASCII), но все равно навык работы с байтами растет.
teo_heel19 уровень, Прокопьевск
11 января, 16:36
Пригодилось мне, модифицировал своё решение. Чувствовал же, что можно проще сделать, никаких StringBuilder и не нужно.