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

C#计算double二维数组每行平均值结果偏差问题求解

问题解答

首先你怀疑的数组声明语句double[,] dTaulu = new double[5, 4];没有任何问题。

  • 数组维度参数要求是Int32类型是合理的:5和4分别代表二维数组的行数、列数,数组的长度、索引都只能是整数,不存在2.5行、1.2列这种定义,所以参数必须是整数类型。

你的计算结果偏差大的根本原因是运算符优先级错误:C#中除法/的运算优先级高于加法+,你写的平均值计算式实际执行的逻辑是「前三个元素直接相加 + 第四个元素除以4的结果」,比如dTaulu[0,0] + dTaulu[0,1] + dTaulu[0,2] + dTaulu[0,3] / 4等价于dTaulu[0,0] + dTaulu[0,1] + dTaulu[0,2] + (dTaulu[0,3] / 4),根本不是四个数的总和除以4,结果自然和正确值差很多。

另外你的代码还有两处可以优化的冗余问题:

  • 循环变量i、j完全没必要声明为double类型,数组索引本身就是整数,直接用int类型声明即可,省掉每次访问数组时的强制类型转换操作。
  • 你写了5个独立的外层for循环,每个循环只遍历固定一行,逻辑完全重复,可以合并成一个外层循环遍历所有行,不用重复写5遍几乎一致的代码。

修正方案

快速修复原有逻辑

给每行四个元素的求和部分整体加上括号,保证先算总和再做除法,以第一行为例:

double average1 = (dTaulu[0,0] + dTaulu[0,1] + dTaulu[0,2] + dTaulu[0,3]) / 4;

其余四行的平均值计算都按这个格式给求和部分加括号,就能得到正确结果。

使用Average()方法的实现

注意二维数组不能直接调用Average()方法,这个方法是LINQ提供的扩展方法,只支持一维可枚举序列,需要先提取每行的所有元素再调用,使用前要先引入System.Linq命名空间。
完整优化后的代码如下:

using System;
using System.Linq; // 必须引入这个命名空间才能使用Average方法

class Program
{
    static void Main(string[] args)
    {
        double[,] dTaulu = new double[5, 4];
        // 把星期对应的芬兰语存在数组里,避免重复写5次输入逻辑
        string[] dayNames = {"maanantain", "tiistain", "keskiviikon", "torstain", "perjantain"};
        
        // 合并后的双层循环,遍历所有行和列录入数据
        for (int i = 0; i < 5; i++)
        {
            for (int j = 0; j < 4; j++)
            {
                Console.Write($"Anna {dayNames[i]} {j + 1} sademäärä: ");
                dTaulu[i, j] = double.Parse(Console.ReadLine());
            }
        }

        // 按行计算平均值
        double[] dayAverages = new double[5];
        int columnCount = dTaulu.GetLength(1); // 获取二维数组的列数
        for (int i = 0; i < dTaulu.GetLength(0); i++) // GetLength(0)获取二维数组的行数
        {
            double[] currentRow = new double[columnCount];
            for (int j = 0; j < columnCount; j++)
            {
                currentRow[j] = dTaulu[i, j];
            }
            dayAverages[i] = currentRow.Average();
        }

        Console.WriteLine($"Maanantai: {dayAverages[0]} mm\nTiistai: {dayAverages[1]} mm\nKeskiviikko: {dayAverages[2]} mm\nTorstai: {dayAverages[3]} mm\nPerjantai: {dayAverages[4]} mm");
        Console.ReadKey();
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 03:09:14