C#按Bonus Tier排序打印销售人员列表及输出错误修复
问题原因
你遇到的分类错误90%以上是条件判断顺序错误导致的:
- 如果你写判断逻辑时先判断了大区间(比如先判断销量<200),会导致所有小于200的销量直接匹配到第一个条件,不会再走后面的小范围判断,比如77<200就会被直接归入等级3,和你遇到的错误表现完全吻合。
- 小概率是边界符号写错,比如把
>=50写成>50,导致刚好50销量的人员被错误归类。
修复方案
1. 修正等级判断逻辑
你可以任选以下两种写法之一,都是逻辑严谨的:
简化写法(无需重复判断下限)
// 输入销量,返回对应奖金等级 int GetBonusTier(int salesCount) { if (salesCount < 50) return 1; // 走到此处的销量已经>=50 if (salesCount < 100) return 2; // 走到此处的销量已经>=100 if (salesCount < 200) return 3; // 剩下的都是>=200 return 4; }
显式边界写法(更适合初学者理解)
int GetBonusTier(int salesCount) { if (salesCount < 50) return 1; if (salesCount >=50 && salesCount <=99) return 2; if (salesCount >=100 && salesCount <=199) return 3; return 4; }
2. 完整实现示例(包含分组统计、控制台打印、文件写入)
using System; using System.Collections.Generic; using System.IO; using System.Linq; public class SalesStaff { public string Name { get; set; } public int SalesVolume { get; set; } } class Program { static void Main(string[] args) { // 你的测试数据 List<SalesStaff> staffList = new List<SalesStaff> { new SalesStaff{ Name = "张XX", SalesVolume = 33 }, new SalesStaff{ Name = "李XX", SalesVolume = 47 }, new SalesStaff{ Name = "王XX", SalesVolume = 77 }, new SalesStaff{ Name = "赵XX", SalesVolume = 156 }, new SalesStaff{ Name = "刘XX", SalesVolume = 220 } }; // 按等级分组统计 var groupResult = staffList .GroupBy(s => GetBonusTier(s.SalesVolume)) .OrderBy(g => g.Key) .ToList(); List<string> outputContent = new List<string>(); foreach (var group in groupResult) { string tierTitle = $"奖金等级{group.Key} 总人数:{group.Count()}"; Console.WriteLine(tierTitle); outputContent.Add(tierTitle); foreach (var staff in group) { string staffInfo = $"- {staff.Name} 销量:{staff.SalesVolume}"; Console.WriteLine(staffInfo); outputContent.Add(staffInfo); } // 等级之间加空行分隔 Console.WriteLine(); outputContent.Add(""); } // 写入本地文件,路径可以自行修改 File.WriteAllLines(@"C:\Users\Public\销售奖金等级统计.txt", outputContent); Console.WriteLine("统计结果已写入文件"); } // 正确的等级判断方法 static int GetBonusTier(int salesCount) { if (salesCount < 50) return 1; if (salesCount < 100) return 2; if (salesCount < 200) return 3; return 4; } }
运行上述代码后,77会被正确归入等级2,所有小于50的人员都会归入等级1,和预期完全一致。
内容的提问来源于stack exchange,提问作者kabax
相关产品推荐
相关产品推荐

