如何在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
相关产品推荐
相关产品推荐

