You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Java中获取所有薪资最高的员工姓名列表

问题解决思路与代码修改

你遇到的错误核心原因是:Java中的数组(如String[])是固定长度的,没有add()方法,这个方法是List系列集合(比如ArrayList)的专属方法。另外你原代码的逻辑还有两处问题:一是遍历从i=1开始会漏掉第一个员工;二是用>=判断时,遇到更高薪资会直接替换最大值,但之前符合旧最大值的员工姓名没有被保留,逻辑不完整。

下面提供两种可行的修改方案:


方案一:使用ArrayList动态收集(推荐,代码更简洁)

先遍历找到最高时薪,再遍历收集所有符合条件的员工姓名,最后把集合转为数组返回:

import java.util.ArrayList;

public class PayRoll {

    public static void main(String[] args) {
        // 原有的Employee对象创建代码不变
        Employee e1 = new Employee("Melissa Black", "M7620", 30, 50.00);
        Employee e2 = new Employee("Richard Hamerly", "R2304", 45, 35.00);
        Employee e3 = new Employee("Bruce Beverly", "B9201", 25, 30.00);
        Employee e4 = new Employee("Jessica Khan", "K7248", 42, 60.00);
        Employee e5 = new Employee("Tom Sylvester", "S3810", 40, 45.00);
        Employee e6 = new Employee("Ariana Bailey", "B4092", 40, 60.00);

        Employee[] list = {e1, e2, e3, e4, e5, e6};
        // 注意:输出数组要用到Arrays.toString,否则会打印内存地址
        System.out.println(java.util.Arrays.toString(highRateEmployee(list)));
    }

    public static String[] highRateEmployee(Employee [] list) {
        // 第一步:遍历找到最高时薪
        double maxRate = list[0].getPayRate();
        for (Employee emp : list) {
            if (emp.getPayRate() > maxRate) {
                maxRate = emp.getPayRate();
            }
        }

        // 第二步:收集所有时薪等于最高值的员工姓名
        ArrayList<String> topNames = new ArrayList<>();
        for (Employee emp : list) {
            if (emp.getPayRate() == maxRate) {
                topNames.add(emp.getName());
            }
        }

        // 将ArrayList转换为String数组返回
        return topNames.toArray(new String[0]);
    }
}

方案二:纯数组实现(不使用集合)

如果不想用集合,可以分三步:先找最高时薪,再统计符合条件的员工数量,最后创建对应长度的数组填充姓名:

public class PayRoll {

    public static void main(String[] args) {
        // 原有的Employee对象创建代码不变
        Employee e1 = new Employee("Melissa Black", "M7620", 30, 50.00);
        Employee e2 = new Employee("Richard Hamerly", "R2304", 45, 35.00);
        Employee e3 = new Employee("Bruce Beverly", "B9201", 25, 30.00);
        Employee e4 = new Employee("Jessica Khan", "K7248", 42, 60.00);
        Employee e5 = new Employee("Tom Sylvester", "S3810", 40, 45.00);
        Employee e6 = new Employee("Ariana Bailey", "B4092", 40, 60.00);

        Employee[] list = {e1, e2, e3, e4, e5, e6};
        System.out.println(java.util.Arrays.toString(highRateEmployee(list)));
    }

    public static String[] highRateEmployee(Employee [] list) {
        // 第一步:找到最高时薪
        double maxRate = list[0].getPayRate();
        for (int i = 1; i < list.length; i++) {
            if (list[i].getPayRate() > maxRate) {
                maxRate = list[i].getPayRate();
            }
        }

        // 第二步:统计符合条件的员工数量
        int count = 0;
        for (Employee emp : list) {
            if (emp.getPayRate() == maxRate) {
                count++;
            }
        }

        // 第三步:创建数组并填充姓名
        String[] topNames = new String[count];
        int index = 0;
        for (Employee emp : list) {
            if (emp.getPayRate() == maxRate) {
                topNames[index++] = emp.getName();
            }
        }

        return topNames;
    }
}

内容的提问来源于stack exchange,提问作者user27719723

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 10:52:41