Считаем зарплаты

  • 10
  • Недоступна
В метод main первым параметром приходит имя файла. В этом файле каждая строка имеет следующий вид: имя значение где [имя] - String, [значение] - double. [имя] и [значение] разделены пробелом. Для каждого имени посчитать сумму всех его значений. Все данные вывести в консоль, предварительно отсортиро
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (125)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Павел22 уровень, Санкт-Петербург
15 июля, 20:56
какие то все тут больно умные я прям смотрю, куда не глянь все просто решают с первого раза, попивая пивко, до конца не прочитав лекцию "да и так все понятно уже", при этом разговаривая с кем то по телефону, да вам нужно уже идти и сразу на мидла устраиваться...
Сева22 уровень, Москва
8 июля, 13:51
Ох уж эти невидимые символы в начале первой строки!!! (utf-8) be careful with BOM
Ярослав Неило20 уровень, Киев
8 июля, 10:38
Сделал все правильно. Отсортировал с помощью Stream API. На экран выводил так:
.forEach(System.out::println)
Данный код хоть и правильно работал, но валидацию не проходил. При этом валидатор ругался по последнему пункту, мол не сортирует.. Поменял вывод в консоль и валидатор принял.
.forEach(entry -> System.out.println(entry.getKey() + " " + entry.getValue()))
Спасибо за код Sipa Barskij (комментарий 9 апреля).
Ярослав Неило20 уровень, Киев
8 июля, 08:53
Для суммирования значения по ключу использовал метод merge(). Очень удобно и без лишних проверок. Советую почитать про этот метод. Ссылка на статью про merge()
Льоха Дон25 уровень
29 мая, 20:18
Валидатор не принимал задание пока я не перестал использовать try с ресурсами для FileReader. При чем в предыдущих примерах подобные решения принимались.
fedor20 уровень, Москва
21 мая, 09:58
уже не в первой задаче применяю фэйк fileReader :
FileReader fileReader = new FileReader(args[0]);
fileReader.close();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(args[0])));
//дальше  -bufferedReader.readLine() и сплит по regex="\\s"
bufferedReader.close();
ибо fileReader - это мазахизмЪ also: TreeMap и .containsKey(key)
Антон23 уровень, Санкт-Петербург
10 июня, 18:11
Что тебе помешало сделать так - BufferedReader reader = new BufferedReader(new FileReader(args[0]));
NewBuy25 уровень, Санкт-Петербург
17 апреля, 17:12
И совет всем решающим, не замарачивайтесь в регулярки, а тупо сплитте прочитанную строку по пробелу. Была написана правильная регулярка, которая правильно работала и с кириллицей и с латиницей (по крайней мере из файла в юникоде), но валидатор такое не принимал.
Pavlo Plynko40 уровень, Киев
18 апреля, 08:23
А какое требование не проходило?
NewBuy25 уровень, Санкт-Петербург
19 апреля, 18:15
Поток чтения из файла (FileReader) должен быть закрыт. Программа должна выводить в консоль каждое имя и сумму всех его значений, все данные должны быть отсортированы в возрастающем порядке по имени.
NewBuy25 уровень, Санкт-Петербург
17 апреля, 17:10
/* Комментарий удален */
Pavlo Plynko40 уровень, Киев
18 апреля, 08:24
А можно пример входного файла?
NewBuy25 уровень, Санкт-Петербург
19 апреля, 18:34
Обычный txt файл, в кодировке UTF-8, Петя в нем указан и первой строкой, и далее по списку присутствует, и насколько я понял, код из первой строки читает Петю вместе с BOM'ом поэтому думает, что первая строка с Петей не равна далее идущей. А если использовать ANSI, то вывод будет вообще типо такого ���� 623.22 ����� 234.0 ������� 200.0 Хотя в исходном файле было 6 строк, и только 2 из них совпадали.
Roman Pryshchepa41 уровень, Киев
25 апреля, 13:32
Используй файл с кодировкой UTF-8 без BOM
Aleks24 уровень
21 мая, 16:29
не могу догнать, как выводить то сам файл, если мы забиваем вместо пути файла args[0] ????
Tom Riddle31 уровень, Москва
10 апреля, 09:58
Иногда мы сами себе создаем проблемы с валидатором. Делал вывод через: System.out.printf(Locale.ENGLISH, "%s %.2f \r\n", pair.getKey(), pair.getValue()); Валидацию не проходило, т.к. в примере нули после запятой хитро обрезаются. В итоге сработало просто: System.out.println(pair.getKey() + " " + pair.getValue());
Sipa Barskij27 уровень
9 апреля, 14:54
9 попыток, но не зря : map.entrySet() .stream() .sorted(Map.Entry.comparingByKey()) .forEach(entry -> System.out.println(entry.getKey() + " " + entry.getValue())); Хорошо описано тут : https://www.baeldung.com/foreach-java
Азер20 уровень, Казань
31 мая, 20:43
Что делает .stream()?