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

C#程序:数组存考试分数求最值及平均值,最低分错误显示0求助

解决最低分始终显示0的问题

嗨,我来帮你排查这个最低分一直显示0的问题~ 这个bug的根源大概率是你初始化最低分变量的方式不对,我来给你拆解清楚:

常见错误原因

很多新手会把最低分(比如minScore)初始设为0,但如果你的输入分数都是正数(比如考试分数通常是0-100,甚至都是及格分),那score < minScore这个判断条件永远不会触发,minScore就会一直停留在初始值0,哪怕你根本没输入过0分。

举个例子,结合你给出的代码片段,推测你的代码大概是这样的:

static void Main(string[] args)
{
    List<int> scores = new List<int>();
    int input;
    int maxScore = 0;
    int minScore = 0; // 这里就是问题所在!
    double average = 0;

    // 循环收集分数
    while (true)
    {
        Console.WriteLine("请输入考试分数(输入-99终止):");
        input = int.Parse(Console.ReadLine());
        if (input == -99) break;
        scores.Add(input);
    }

    // 计算高低分
    foreach (int score in scores)
    {
        if (score > maxScore) maxScore = score;
        if (score < minScore) minScore = score; // 所有分数都>0的话,这个条件永远不成立
    }

    average = scores.Average();
    Console.WriteLine($"最高分:{maxScore},最低分:{minScore},平均分:{average:F2}");
}

修正方案

我们需要用第一个有效输入的分数来初始化最高分和最低分,而不是固定设为0,这样就能保证高低分的判断是基于实际输入的分数。这里有两种常用的修正方式:

方式1:收集完所有分数后初始化高低分

适合分数不多的场景,逻辑清晰:

static void Main(string[] args)
{
    List<int> scores = new List<int>();
    int input;
    int maxScore;
    int minScore;
    double average = 0;

    // 收集分数
    while (true)
    {
        Console.WriteLine("请输入考试分数(输入-99终止):");
        // 额外建议:这里可以加个输入合法性判断,避免非数字输入报错
        if (!int.TryParse(Console.ReadLine(), out input))
        {
            Console.WriteLine("请输入有效的数字!");
            continue;
        }
        if (input == -99) break;
        scores.Add(input);
    }

    // 先判断是否有有效分数
    if (scores.Count == 0)
    {
        Console.WriteLine("没有输入任何有效分数!");
        return;
    }

    // 用第一个分数初始化高低分
    maxScore = scores[0];
    minScore = scores[0];

    // 遍历更新高低分
    foreach (int score in scores)
    {
        if (score > maxScore) maxScore = score;
        if (score < minScore) minScore = score;
    }

    average = scores.Average();
    Console.WriteLine($"最高分:{maxScore},最低分:{minScore},平均分:{average:F2}");
}

方式2:输入过程中实时更新高低分

更高效,不用额外遍历一次数组:

static void Main(string[] args)
{
    List<int> scores = new List<int>();
    int input;
    int maxScore;
    int minScore;
    double average = 0;

    // 处理第一个输入
    Console.WriteLine("请输入考试分数(输入-99终止):");
    if (!int.TryParse(Console.ReadLine(), out input))
    {
        Console.WriteLine("请输入有效的数字!");
        return;
    }
    if (input == -99)
    {
        Console.WriteLine("没有输入任何有效分数!");
        return;
    }
    scores.Add(input);
    maxScore = input;
    minScore = input;

    // 继续收集后续分数并实时更新高低分
    while (true)
    {
        Console.WriteLine("请输入考试分数(输入-99终止):");
        if (!int.TryParse(Console.ReadLine(), out input))
        {
            Console.WriteLine("请输入有效的数字!");
            continue;
        }
        if (input == -99) break;
        scores.Add(input);
        if (input > maxScore) maxScore = input;
        if (input < minScore) minScore = input;
    }

    average = scores.Average();
    Console.WriteLine($"最高分:{maxScore},最低分:{minScore},平均分:{average:F2}");
}

额外小提示

别忘了处理用户输入非数字的情况(上面的代码用了int.TryParse来避免程序崩溃),还有一开始就输入-99的空输入场景,这样你的程序会更健壮哦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:39:32