2D阵列显示错误

时间:2014-04-11 06:31:57

标签: c# arrays methods multidimensional-array

我应该如何显示我的2D数组?还是我的阵列的平均总和?它不会让我。

代码应该显示一个二维数组,添加所有这些数字,计算平均值并显示平均值。

// It gives me a richTextBox error. I tried to change 'float' to 'void' - gives
// me a return error.
//
// It says the object require non static field?
richTextBox1.AppendText(array[ i, j] + " ");
richTextBox1.AppendText(" "+ sum.ToString());
return avg; // <<< Error here

static float Avg(int[,] array)
{
    return (float)array.OfType<int>().Average();
    richTextBox1.Clear(); // <<<<==================== Here
    Random rand = new Random();
    float sum = 0;
    int rows = array.GetLength(0);
    int cols = array.GetLength(1);
    for (int i = 0; i < array.Length; i++)
    {
        for (int j = 0; j < cols; j++)
        {
            int value = rand.Next(-100, 100);
            array[i, j] = value;
            richTextBox1.AppendText(value + " "); // <<<<<<<===== Here
            if (value <= 0)
                sum += value;
            float avg = sum / value;
        }
        return avg;//<<<========here
    }
    richTextBox1.AppendText(" Total Average is: " + avg.ToString()); // <<<==== Here
}

private void button6_Click(object sender, EventArgs e)
{
    Avg(A);
}

2 个答案:

答案 0 :(得分:1)

试试这个:

static float Avg(int[,] array)
{
   return (float)array.OfType<int>().Average();
}

然后你就这样使用它:

var array = new int [2,3] {{1,2, 3}, {4,5, 6}};
Console.WriteLine(Avg(array));

更新 - 适用于锯齿状数组

static float Avg(int[][] array)
{
   return (float)array.SelectMany(a => a).Average();
}

void Main()
{
     int[][] array = 
    {
        new int[] {1,2,3},
        new int[] {4,5}
    };
    Console.WriteLine(Avg(array));
}

更新2 如果你想这样做,试试这个:

    private void Avg(int [,] array)
{   
    richTextBox1.Clear();

    float sum = 0;
    int rows = array.GetLength(0);
    int cols = array.GetLength(1);
    for (int i = 0; i < rows; i++)
    {
        for (int j = 0; j < cols; j++)
        {                
            richTextBox1.AppendText(array[i,j] + " ");                
            sum += array[i,j];
        }
    }

    richTextBox1.AppendText(" Total Average is: " + (float)sum/(rows*cols));
}

答案 1 :(得分:0)

因为我们实际上并不知道,您尝试使用Avg方法做什么。我只想尝试sumarize:

  1. static float Avg:您不能在使用表单实例成员(如richTextBox1)的地方使用static。请删除'静态'或仅在OnClick方法中移动richTextBox1的使用。

  2. 请勿在您想要的地方使用return。它之后的一切都不会处理(如果没有使用try / finally)。如果要使用返回的值,请在处理完方法中的所有内容后在最后一行调用它。

  3. return avgavg在当前上下文中是未知的,是否在前一个闭包中定义了(你知道你的邻居在闭门的背后是什么吗?)

  4. 有关最终解决方案,请参阅Ned的回答。