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

成绩区间统计代码从if转换为switch后运行异常,错误原因是什么?

问题分析

你的switch版本代码存在两个核心错误,直接导致统计结果异常:

  • 缺失遍历所有学生的循环逻辑
    正常运行的if版本外层包了for (int i = 0; i < students.Length; i++)循环,会逐个处理每个学生的成绩。但switch版本只定义了int i = 0,仅处理了下标为0的第一个学生,其余所有学生完全没有进入统计逻辑,自然不会有计数。
  • switch的case匹配逻辑完全错误
    switch语句的case是全等匹配规则,你在switch括号中传入的是学生的成绩值(0-100的整数),但写的case 1、case 2等是把case当成了区间编号,只有当学生成绩刚好等于1/2/3/4时才会进入对应case分支,其余所有成绩都匹配不到预设case,直接走default分支,这也是为什么大部分分数都被统计到90+区间的原因。
修正后的switch实现

版本1(基于C# 7+的case when语法,逻辑更直观)

// 加上遍历所有学生的外层循环
for (int i = 0; i < students.Length; i++)
{
    switch (students[i].Grade)
    {
        case int g when g <= 59:
            distributions[0] += 1;
            break;
        case int g when g >= 60 && g <= 69:
            distributions[1] += 1;
            break;
        case int g when g >= 70 && g <= 79:
            distributions[2] += 1;
            break;
        case int g when g >= 80 && g <= 89:
            distributions[3] += 1;
            break;
        // 90分及以上走默认分支
        default:
            distributions[4] += 1;
            break;
    }
}

Console.WriteLine("0-59: {0}\n60-69: {1}\n70-79: {2}\n80-89: {3}\n90-100: {4}", distributions[0], distributions[1], distributions[2], distributions[3], distributions[4]);

版本2(传统switch写法,兼容旧版本C#)

利用成绩整除10的结果做固定值匹配,逻辑更简洁:

for (int i = 0; i < students.Length; i++)
{
    int gradeLevel = students[i].Grade / 10;
    switch (gradeLevel)
    {
        case 0:
        case 1:
        case 2:
        case 3:
        case 4:
        case 5:
            distributions[0] += 1;
            break;
        case 6:
            distributions[1] += 1;
            break;
        case 7:
            distributions[2] += 1;
            break;
        case 8:
            distributions[3] += 1;
            break;
        // 9、10对应90-99、100分
        default:
            distributions[4] += 1;
            break;
    }
}

Console.WriteLine("0-59: {0}\n60-69: {1}\n70-79: {2}\n80-89: {3}\n90-100: {4}", distributions[0], distributions[1], distributions[2], distributions[3], distributions[4]);

内容的提问来源于stack exchange,提问作者Walter Melon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 22:45:04