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

C#计算掷骰子列表平均值报CS0019/CS0165错误问题咨询

问题结论

不需要修改RullaTärning方法,该方法的6面骰子随机掷点逻辑完全符合要求,仅需调整case 2分支的计算逻辑即可解决报错、实现平均值计算,且修正逻辑完全符合作业仅允许使用static修饰符的要求,无需新增非静态成员或其他访问修饰符。

报错原因

两个编译错误的触发原因非常明确:

  • CS0019:C#不支持List<int>类型对象直接和整数做除法运算,你写的tärningar / antal是试图用整个整数列表去除以数字,语法上完全不成立,计算平均值需要先拿到列表内所有掷骰点数的总和,而非直接操作列表对象本身。
  • CS0165:antal变量是你在case 1分支内通过out int antal声明的局部变量,作用域仅局限在case 1的代码块中,case 2分支根本访问不到这个变量;且从业务逻辑上看这个值也不适合作为除数——掷骰结果是持续追加到tärningar列表中的,列表自带的Count属性才是准确的总掷骰次数,不需要依赖用户之前输入的临时值。
修正方案

你可以直接在遍历输出掷骰结果的循环里累加所有点数的总和,再用总和除以总掷骰次数得到平均值,修正后的case 2代码如下:

case 2:
    int sum = 0;
    if (tärningar.Count <= 0)
    {
        Console.WriteLine("\n\tDet finns inga sparade tärningsrull! ");
    }
    else
    {
        Console.WriteLine("\n\tRullade tärningar: ");
        foreach (int tärning in tärningar)
        {
            Console.WriteLine("\t" + tärning);
            sum += tärning; // 遍历过程中累加所有点数得到总和
        }
        // 将sum强制转换为double类型再做除法,避免整数除法截断小数,得到更精确的平均值
        double average = (double)sum / tärningar.Count;
        Console.WriteLine("\n\tMedelvärdet på alla tärningsrull: " + average);
    }
    break;

如果你只需要输出整数形式的平均值,不需要保留小数,直接使用int average = sum / tärningar.Count即可,注意整数除法会直接舍弃小数部分,不会做四舍五入。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 19:03:49