【问题标题】:Sum of 2-d Random Array二维随机数组之和
【发布时间】:2015-06-29 02:52:15
【问题描述】:

我正在编写一个程序,它创建一个二维数组,用随机数填充它,然后执行某些操作。

我的SumArray() 方法应该有一个二维数组作为参数列表,并将数组中的所有数字相加并返回总和。我知道我现在拥有它的方式是错误的,我很难做到这一点。到目前为止,我在程序中的其他方法是否正确编码,或者它们是否错误并且不允许我执行程序的任务?

感谢您对 SumArray() 方法的任何帮助或我在代码其他部分遇到的任何问题!谢谢!

当我运行我的程序时,我收到一个错误,指出索引超出了数组的范围!

这是我的代码:

static void Main(string[] args)
    {
        string[] months = { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" };
        string[,] randomNumArray = new string[3, 5];

        FillArray(randomNumArray);
        PrintArray(randomNumArray);
        SumRows(randomNumArray);
        SumCols(randomNumArray);
        SumArray(randomNumArray);

    }

    public static void FillArray(int[,] randomNumbersArray)
    {
        Random num = new Random();
        for (int r = 0; r < randomNumbersArray.GetLength(0); r++)
        {
            for (int c = 0; c < randomNumbersArray.GetLength(1); c++)
            {
                randomNumbersArray[r, c] = num.Next(15, 97);
            }
        }
    }

    public static void PrintArray(int[,] randomPrintArray)
    {
        for (int r = 0; r < randomPrintArray.GetLength(0); r++)
        {
            for (int c = 0; c < randomPrintArray.GetLength(1); r++)
            {
                Console.Write("{0}", randomPrintArray[r, c]);
            }
            Console.WriteLine();
        }
    }

    public static void SumRows(int[,] sumOfRowsArray)
    {
        int rowSum;
        for (int r = 0; r < sumOfRowsArray.GetLength(0); r++)
        {
            rowSum = 0;
            for (int c = 0; c < sumOfRowsArray.GetLength(1); c++)
            {
                rowSum += sumOfRowsArray[r, c];
            }
        }
    }

    public static void SumCols(int[,] sumOfColsArray)
    {
        int colsSum;
        for (int r = 0; r < sumOfColsArray.GetLength(1); r++)
        {
            colsSum = 0;

            for (int c = 0; c < sumOfColsArray.GetLength(0); c++)
            {
                colsSum += sumOfColsArray[r, c];
            }
        }
    }

    public static void SumArray(int[,] sumOfAllArray)
    {
        int sumOfAll 0;
        for (int r = 0; r < sumOfAllArray.GetLength(0); r++)
        {
            sumOfAll += sumOfAll;
            for (int c = 0; c < sumOfAllArray.GetLength(1); c++)
            {
                sumOfAll += sumOfAllArray[r, c];
            }
        }
        Console.Write(sumOfAll);
    }

【问题讨论】:

  • SumRows() 是行的总和 SumCols() 应该找到列的总和,而 FillArray() 应该用随机数填充数组
  • 您有什么理由认为这些部分可能会损坏吗?我会尝试用一些东西填充行/列,以便我知道总和应该是什么并验证它(至少在简单的情况下)。例如,如果我填写所有 1,我应该知道总和是多少。
  • 我的 SumArray 方法有错误。 sumOfAll += sumOfAll 出现错误,因此我无法运行它来检查任何内容。我对如何执行数组的总和感到困惑。

标签: arrays for-loop multidimensional-array parameters variable-assignment


【解决方案1】:

我认为你不需要那个

sumOfAll += sumOfAll;

SumArray 方法中。 如果我正确理解您的代码,在内部循环中计算列总和,然后在下一次迭代中将其添加到自身?例如,在内部循环之后,您的第一列总和为 10。您将该 10 添加到自身,并且在迭代第二列之前,您的总和为 20。

正确的代码:

public static void SumArray(int[,] sumOfAllArray)
{
    int sumOfAll;
    for (int r = 0; r < sumOfAllArray.GetLength(0); r++)
    {
        for (int c = 0; c < sumOfAllArray.GetLength(1); c++)
        {
            sumOfAll += sumOfAllArray[r, c];
        }
    }
}

【讨论】:

  • 由于某种原因,当我删除 sumOfAll += sumOfAll 时,它给我一个 sumOfAll +=sumOfAllArray[r,c] 错误,上面写着“使用未分配的局部变量 sumOfAll”
  • 嗯,你可能没有初始化变量。尝试改变“int sumOfAll;”到“int sumOfAll = 0;”在方法的开头。
  • alrite 我将它初始化为零,但是当我现在尝试运行代码时,它说索引超出了数组的范围。我在数组FillArray(randomNumArray);PrintArray(randomNumArray);SumRows(randomNumArray);SumCols(randomNumArray);SumArray(randomNumArray);的声明和创建正下方添加了这些方法,我将按照这个顺序编辑上面的代码以显示
  • 我还在 SumArray 方法中添加了一个 Console.Write(sumOfAll) 语句来输出总和进行检查。
  • 此方法超出范围?这是c#?好吧,我要做的第一件事是查看 GetLength(0) 和 GetLength(1) 是否没有混淆。不知道为什么,但我有一种感觉,GetLength(0) 返回列数,GetLength(1) 返回行数。试一试:将 0 更改为 1,反之亦然:)
猜你喜欢
  • 1970-01-01
  • 2017-10-07
  • 1970-01-01
  • 2017-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-19
  • 2021-11-28
相关资源
最近更新 更多