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

  • 12
  • Недоступна
В метод main первым параметром приходит имя файла. В этом файле каждая строка имеет следующий вид: имя значение где [имя] - String, [значение] - double. [имя] и [значение] разделены пробелом. Для каждого имени посчитать сумму всех его значений. Все данные вывести в консоль, предварительно отсортиро
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (268)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Grigory Filiptsov
Уровень 20, Воронеж, Россия
вчера, 21:10
Программа должна выводить в консоль каждое имя и сумму всех его значений, все данные должны быть отсортированы в возрастающем порядке ПО ИМЕНИ то есть по ключу!!! Обратите внимание) TreeMap именно так и хранит по умолчанию значения, а вот я пытался вначале по увеличению значения отсортировать))
Павел
Уровень 22
12 января, 09:21
String args = args[0] - так эта фигня бесит! что это ? зачем? почему?
Sasha Dokuchaev Работает в Andersen
12 января, 11:43
Если это вопрос, что значит
args[0]
То это означает первый элемент массива String[] args, который передаётся в метод main при запуске программы. В "Edit Configuration" в Intelij мы можем в поле "Program arguments" вписывать параметры через запятую, которые автоматом при запуске программы попадут по очереди в этот массив args
Антон Власов
Уровень 30, Russian Federation
29 декабря 2021, 04:32
после тегов изи) но не использовал merge, treemap и это немного печалит... вместо этого treeset и самописный класс person, переопределил compareTo и toSting, в цикле чтения налету парсил сравнивал, суммировал или укладывал. после чтения вывел сет
Петр Селищев
Уровень 24, Санкт-Петербург, Россия
5 декабря 2021, 17:49
Качественное объяснение класса TreeMap https://www.youtube.com/watch?v=u-ilAwbJWYc
Sergey Kornilov
Уровень 36, Petropavlovsk, Казахстан
23 ноября 2021, 06:42
Всего эту задачу решили 17202 учеников. 1) bufferedReader.readLine().split(" "); Добавляем в массив, разбивая фамилию и сумму 2) map.merge( - складываем в Мапу, прочитайте синтаксис, она умеет сразу суммировать деньги однофамильцев 3) Collections.sort(list,Comparator.comparing сортируем по фамилии 4) list.forEach(stringDoubleEntry -> выводим в консоль
Oleg Makeienko
Уровень 22, Strömsund
26 ноября 2021, 20:31
использовал TreeMap для сортировки
Нурислам
Уровень 22
7 декабря 2021, 17:48
и еще проверьте кодировку в файле, когда будете тестить). Должно быть просто UTF-8, иначе суммирование работать не будет 👌
Ulysse
Уровень 30
13 декабря 2021, 14:04
как по мне, то слишком неудобно, проще в пару строчек проверять есть ли там уже такой человек
if (mapSalary.containsKey(secondName))
       mapSalary.put(secondName, mapSalary.get(secondName) + salary);
собственно, в правильном решении так и сделано
Евгений Т.
Уровень 30, Москва, Россия
7 ноября 2021, 10:35
Сделал, с первой попытки почти так же как в готовом примере, почитав комменты, нашел более подходящие современные способы. Но все равно после предыдущей задачи очень приятно, что сам справился достаточно быстро.
Alex
Уровень 32, Нижний Новгород, Россия
19 октября 2021, 11:51
В TreeMap можно использовать метод compute, все вычисления в 1 строке.
Михаил
Уровень 20, Санкт-Петербург
18 октября 2021, 05:39
Создал TreeMap. Считал строку, сплит, проверяю есть ли key, если нет, то put, если есть получаю на key соотв value, складываю их (они уже в виде double) и replace. Потом вывод через foreach. TreeMap - она все в отсортированном виде хранит. Почитал ниже про java 8 и про merge(). Красивое...
Aleksey
Уровень 47, Пермь, Россия
22 сентября 2021, 19:18
Задачу решил без merge() через containsKey(). Но пока читал комментарии поизучал BufferedReader. Вот оказывается как в одну строку можно считать все строки в List:
BufferedReader br = new BufferedReader(new FileReader(fileName));
 List<String> list = new ArrayList<>();
 br.lines().forEach(s -> list.add(s));
Может кому (всем, кто еще не знал) полезно будет.
vk
Уровень 26, Санкт-Петербург, Россия
Master
23 сентября 2021, 08:52
lines() возвращает стрим, стрим можно собрать в коллекцию. методом collect А чтобы не забывать закрыть стрим, используй try-with-resources
private static List<String> readFile(String fileName) throws IOException {
    try (BufferedReader reader = new BufferedReader(new FileReader(fileName))) {
        return reader.lines().collect(Collectors.toList());
    }
}
Andrey Panchenko
Уровень 26, Краснодар, Россия
15 сентября 2021, 08:58
Вот таким методом. Как говорится, чему учили. String[] line = reader.readLine().split(" "); if (map.containsKey(line[0])) map.replace(line[0], map.get(line[0]) + Double.parseDouble(line[1]));