C#代码问题:5名员工最高售出量判断逻辑错误,始终选中首位员工
解决判断最高出价总是选中首位员工的问题
问题描述
需要为5名员工录入姓名及≤100的销售数量,最终输出销售数量最高的员工及对应数值,但现有代码在判断最高值时总是选中首位员工。
错误原因
原代码的比较逻辑存在严重问题:使用了一串顺序错误的else if判断,只要第一个条件(员工1的销量>员工5的销量)成立,后续所有判断都会被跳过,直接认定员工1为最高,完全没有和员工2、3、4的销量做有效比较。比如哪怕员工2的销量远高于员工1,只要员工1的销量比员工5大,就会直接跳过后面的判断,导致结果错误。
通俗易懂的解决方案
方案1:修正原有比较逻辑(最小改动)
保留原有的输入代码,只修改判断最高值的部分:
- 先把首位员工的信息设为初始最高值
- 依次和剩下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
相关产品推荐
相关产品推荐

