You need to enable JavaScript to run this app. C#按Bonus Tier排序打印销售人员列表及输出错误修复
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 09:54:04