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
相关产品推荐
相关产品推荐

