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

C#代码问题:5名员工最高售出量判断逻辑错误,始终选中首位员工

解决判断最高出价总是选中首位员工的问题

问题描述

需要为5名员工录入姓名及≤100的销售数量,最终输出销售数量最高的员工及对应数值,但现有代码在判断最高值时总是选中首位员工。

错误原因

原代码的比较逻辑存在严重问题:使用了一串顺序错误的else if判断,只要第一个条件(员工1的销量>员工5的销量)成立,后续所有判断都会被跳过,直接认定员工1为最高,完全没有和员工2、3、4的销量做有效比较。比如哪怕员工2的销量远高于员工1,只要员工1的销量比员工5大,就会直接跳过后面的判断,导致结果错误。

通俗易懂的解决方案

方案1:修正原有比较逻辑(最小改动)

保留原有的输入代码,只修改判断最高值的部分:

  1. 先把首位员工的信息设为初始最高值
  2. 依次和剩下4名员工的销量逐一比较,如果发现更大的,就更新最高值和对应姓名

修改后的判断部分代码:

//top seller and largest bid
string topSeller = employee;
int largestBid = widgetsSold;

// 依次和员工2比较
if (widgetsSold2 > largestBid)
{
    topSeller = employee2;
    largestBid = widgetsSold2;
}

// 和员工3比较
if (widgetsSold3 > largestBid)
{
    topSeller = employee3;
    largestBid = widgetsSold3;
}

// 和员工4比较
if (widgetsSold4 > largestBid)
{
    topSeller = employee4;
    largestBid = widgetsSold4;
}

// 和员工5比较
if (widgetsSold5 > largestBid)
{
    topSeller = employee5;
    largestBid = widgetsSold5;
}

Console.WriteLine($"{topSeller} had the highest bid of {largestBid}.");

方案2:用循环简化代码(更专业,减少重复)

原输入部分重复了5次相同的代码,用循环可以大幅简化,同时更方便后续扩展(比如改成10名员工只需要改数字):

using System;
using System.Collections.Generic;

class TopSeller
{
    private static void Main(string[] args)
    {
        // 用列表存储员工信息,每个元素是包含姓名和销量的元组
        List<(string Name, int Sales)> employees = new List<(string, int)>();

        for (int i = 1; i <= 5; i++)
        {
            Console.WriteLine($"Hello, Can you please enter employee #{i}'s name: ");
            string name = Console.ReadLine();

            int sales;
            do
            {
                Console.WriteLine($"Enter the number of widgets sold by {name}: ");
                sales = int.Parse(Console.ReadLine());
                if (sales > 100)
                {
                    Console.WriteLine("Number has to be at or below 100. Re-enter Widgets sold: ");
                }
            } while (sales > 100); // 循环直到输入符合要求

            employees.Add((name, sales));
        }

        // 找出最高销量的员工
        string topSeller = employees[0].Name;
        int largestSales = employees[0].Sales;

        foreach (var emp in employees)
        {
            if (emp.Sales > largestSales)
            {
                topSeller = emp.Name;
                largestSales = emp.Sales;
            }
        }

        Console.WriteLine($"{topSeller} had the highest bid of {largestSales}.");
    }
}

额外说明

  • 方案1适合新手快速修正问题,不用改动太多原有代码
  • 方案2使用了循环和列表,减少了重复代码,后续如果要增加员工数量,只需要修改for循环的上限(把5改成其他数字)即可
  • 输入部分用do-while循环可以确保用户输入的数值一定≤100,原代码只判断了一次,如果用户第二次还是输入大于100的数,会直接接受,do-while可以解决这个问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 10:35:54