1

嗨,所以我有两个班级员工和部门。我的主要功能读取一个 .txt 文件,其中包含员工姓名、薪水、部门和职位。我的 Employee 类只是 getter 和 setter。制作了一个数组列表来代表员工,我不确定如何找到每个部门的最低工资。为了找到最高薪水,我在我的部门班上做了这个。

public class Department {
    String dept;
    List<Employee> employees;
    double minSal;
    double maxSal;

    public void addEmployee(Employee emp){
        maxSal = 0.0;
        if (maxSal < emp.getSalary()) {
            maxSal = emp.getSalary();
        }

但我不确定如何获得最低工资。我的想法是从每个部门获取一名员工的薪水,并以此为起点

if (minSal > emp.getSalary()) {
    minSalary = emp.getSalary();
}

但我意识到我不知道该怎么做。我能得到一些帮助吗?

4

4 回答 4

2
if (employees.isEmpty() {
   return null; // No minimum salary available.
}
int minSalary = Integer.MAX_INT;
for (Employee e : employees) {
    minSalary = Math.min(minSalary, e.getSalary();
}
return minSalary;
于 2013-04-25T01:53:57.637 回答
2

听起来您想要每个部门的最低薪水列表,而其他答案似乎只是为您提供跨部门的最低薪水。如果我是对的,并且您希望按部门获得低薪,您可能只想遍历列表并按部门将它们放在地图中,如下所示:

public Map<String, Double> getLowSalaries(List<Employee> employees) {
    Map<String, Double> lowSalaries = new HashMap<String, Double>();

    for(Employee employee : employees) {
        Double lowSalaryForDept = lowSalaries.get(employee.getDept());

        if(lowSalaryForDept == null || lowSalaryForDept < employee.getSalary()) {
            lowSalaries.put(employee.getDept(), employee.getSalary());
        }
    }
    return lowSalaries;
}
于 2013-04-25T02:01:38.957 回答
0

有一个特殊的数字 ,Double.POSITIVE_INFINITY它大于任何可以用 表示的数字double。您可以将其用作搜索最小值的起点:

double minSalary = Double.POSITIVE_INFINITY;
...
if (minSal > emp.getSalary()) {
    minSalary = emp.getSalary();
}

另一个常见的技巧是设置minSalary列表的第一个元素,然后从第二个元素开始搜索。

于 2013-04-25T01:52:49.290 回答
0

这是使用 的变体Iterator

public double minSalary(List<Employee> employees) {
    if (employees == null || employees.isEmpty()) {
        throw new IllegalArgumentException();
    }

    Iterator<Employee> iterator = employees.iterator();
    double min = iterator.next();
    while (iterator.hasNext()) {
        min = Math.min(min, iterator.next().getSalary());
    }

    return min;
}
于 2013-04-25T01:57:22.153 回答