Loading...
RuNNeR4142 avatar RuNNeR4142 396 Точки

1. Company Roster - More Exercise: Objects and Classes

Define a class Employee that holds the following information: name, salary, position, department, email and age.
The name, salary, position and department are mandatory while the rest are optional.
Your task is to write a program which takes N lines of employees from the console and calculates the department
with the highest average salary and prints for each employee in that department his name, salary, email and age –
sorted by salary in descending order. If an employee doesn’t have an email – in place of that field you should print
“n/a” instead, if he doesn’t have an age – print “-1” instead. The salary should be printed to two decimal places
after the seperator.
Hint: you can define a Department class that holds list of employees.
Examples

Input Output

4
Pesho 120.00 Dev Development pesho@abv.bg 28
Toncho 333.33 Manager Marketing 33
Ivan 840.20 ProjectLeader Development ivan@ivan.com
Gosho 0.20 Freeloader Nowhere 18

Highest Average Salary: Development
Ivan 840.20 ivan@ivan.com -1
Pesho 120.00 pesho@abv.bg 28

6
Stanimir 496.37 Temp Coding stancho@yahoo.com
Yovcho 610.13 Manager Sales
Toshko 609.99 Manager Sales toshko@abv.bg 44
Venci 0.02 Director BeerDrinking beer@beer.br 23
Andrei 700.00 Director Coding
Popeye 13.3333 Sailor SpinachGroup popeye@pop.ey

Highest Average Salary: Sales
Yovcho 610.13 n/a -1
Toshko 609.99 toshko@abv.bg 44
 

https://pastebin.com/w00DfpR8    80/100   Test#5 

Някой може ли да предложи защо гърми? Благодаря предварително!

1
Fundamentals Module
RuNNeR4142:
неправилно изчсляване на средната заплата
mark79 avatar mark79 639 Точки
Best Answer

Здравей,

извинявай, не съм гледал кода ти, но ако решиш можеш да погледнеш моя подход към задачата!

Поздрави :)

 

P.S. Намерих грешката. Явно се получава при изчисляването на средната заплата за даден департамент. Промяна като тази по-долу би свършила работа. Като код не изглежда добре, но просто гледах да използвам твоята логика.

 

            employeeList.add(employee);
        }

        List<String> departmentsList = employeeList.stream().
                map(Employee::getDepartment).
                distinct().collect(Collectors.toList());

        for (String department : departmentsList) {
            double sum = 0.0;
            int count = 0;
            for (Employee employee : employeeList) {
                if (employee.getDepartment().equals(department)) {
                    sum += employee.getSalary();
                    count++;
                }
            }
            if (sum / count > highestAverageSalary) {
                highestAverageSalary = sum / count;
                bestDepartment = department;
            }
        }

        System.out.println("Highest Average Salary: " + bestDepartment);

 

2
27/07/2019 08:25:01
willystyle avatar willystyle 2472 Точки

Нищо общо с неговата логика, той пресмята средната заплата при добавяне на нов работник, което не е оптимално, но как реши че точно там е грешката, аз все още не я виждам.

PS. Всъщност да, сега я забелязах, при него не е правилно, понеже може при нов работник с ниска заплата, средата заплата за фирмата да падне, и тя вече да не е с най-добра средна заплата. Затова средната заплата трябва да се пресмята накрая, след всички входове.

2
27/07/2019 02:34:30
RuNNeR4142 avatar RuNNeR4142 396 Точки

Много добро включване! Научих 2 метода днес: average() и distinct(). Благодаря ти!

2
pratchet avatar pratchet 2 Точки

Ето още едно решение само с един клас и повечко сортировка :)

ПейстБин

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.