Java员工姓名匹配问题:如何将用户输入姓名与数组中所有姓名比对
解决员工姓名匹配与销售额对比的问题
嘿,我帮你搞定这个问题!你现在的代码在检查员工姓名是否存在时,逻辑完全搞反了——只要第一个姓名不匹配就直接退出程序,根本没机会遍历整个数组。而且还有个隐藏坑:字符串对比用!=是错的,得用equals()方法。我一步一步给你修正:
核心问题分析
你当前的内层循环逻辑有两个致命问题:
- 字符串比较错误:用
!=对比字符串是在比较对象引用,不是内容。哪怕两个字符串内容一样,只要是不同的对象,!=都会返回true,这会导致误判。 - 逻辑顺序错误:只要遇到一个不匹配的姓名就直接退出程序,而应该是遍历完所有姓名都没找到匹配项时,才判定员工不存在。
修正后的完整代码
import java.util.Scanner; public class Array { public static void main(String[] args) { int numberOfEmployees; // 存储员工总数 int compare; // 需要对比的员工数量 Scanner sp = new Scanner(System.in); System.out.println("Enter the number of employees: "); numberOfEmployees = sp.nextInt(); String[] employeeName = new String[numberOfEmployees]; double[] annualSales = new double[numberOfEmployees]; // 变量名小写开头更符合Java规范 // 录入员工信息 for(int i = 0 ; i < numberOfEmployees ; i++) { System.out.printf("Enter name of employee %d: ",i+1); employeeName[i] = sp.next(); System.out.printf("Enter sales of employee %d: ",i+1); // 修正原代码的salary表述错误 annualSales[i] = sp.nextDouble(); } System.out.println("Enter the number of employees you want to compare records of: "); compare = sp.nextInt(); if(compare > numberOfEmployees) { System.out.println("IndexOutOfBound"); System.exit(0); } String[] comparisonNames = new String[compare]; double[] comparisonSales = new double[compare]; // 存储要对比的员工销售额 for(int i = 0; i < compare; i++) { System.out.printf("Enter name of employee %d for comparison: ",i+1); comparisonNames[i] = sp.next(); boolean employeeFound = false; // 遍历所有员工查找匹配姓名 for(int j = 0 ; j < numberOfEmployees ; j++) { // 用equals()对比字符串内容 if(comparisonNames[i].equals(employeeName[j])) { employeeFound = true; comparisonSales[i] = annualSales[j]; // 记录对应员工的销售额 break; // 找到匹配项后提前退出循环,提升效率 } } // 遍历完所有员工都没找到才提示不存在并退出 if(!employeeFound) { System.out.println("Employee does not exist!"); System.exit(0); } } // 对比两名员工的销售额,补充相等的情况 if(comparisonSales[1] > comparisonSales[0]) { System.out.printf("Sales of %s are greater than %s", comparisonNames[1], comparisonNames[0]); } else if(comparisonSales[1] == comparisonSales[0]) { System.out.printf("Sales of %s are equal to %s", comparisonNames[1], comparisonNames[0]); } else { System.out.printf("Sales of %s are less than %s", comparisonNames[1], comparisonNames[0]); } sp.close(); } }
关键修改点说明
- 字符串对比修正:把
comparison[i] != employeeName[j]改成comparisonNames[i].equals(employeeName[j]),确保对比的是字符串内容而非引用。 - 存在性检查逻辑修正:用
employeeFound布尔变量标记是否找到匹配员工,遍历完整个数组后再判断是否提示不存在,避免中途退出。 - 销售额匹配修正:新增
comparisonSales数组存储对应员工的销售额,解决原代码直接用数组索引取销售额的错误(原代码取的是最后两个员工的销售额,不是用户输入的目标员工)。 - 细节优化:修正了变量名(
AnnualSales改成annualSales符合Java命名规范),补充了销售额相等的判断分支,让程序逻辑更完整。
内容的提问来源于stack exchange,提问作者Lakshya Munjal
相关产品推荐
相关产品推荐

