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

Java员工姓名匹配问题:如何将用户输入姓名与数组中所有姓名比对

解决员工姓名匹配与销售额对比的问题

嘿,我帮你搞定这个问题!你现在的代码在检查员工姓名是否存在时,逻辑完全搞反了——只要第一个姓名不匹配就直接退出程序,根本没机会遍历整个数组。而且还有个隐藏坑:字符串对比用!=是错的,得用equals()方法。我一步一步给你修正:

核心问题分析

你当前的内层循环逻辑有两个致命问题:

  1. 字符串比较错误:用!=对比字符串是在比较对象引用,不是内容。哪怕两个字符串内容一样,只要是不同的对象,!=都会返回true,这会导致误判。
  2. 逻辑顺序错误:只要遇到一个不匹配的姓名就直接退出程序,而应该是遍历完所有姓名都没找到匹配项时,才判定员工不存在。

修正后的完整代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:01:25