二维数组c#beginner的总和

时间:2016-12-08 12:49:28

标签: c# arrays

我还在学习c#并且有关于我的代码的问题。理论上我应该得到60的值,但由于某种原因它只返回47.任何人都知道为什么?我想用while循环和if来解决它。因此,需要一个不使用foreach的解决方案。

非常感谢任何帮助。

我的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace B7ArraysPart2
{
    class Program
    {
        /// <summary>
        /// Returns the sum of all elements in the given array
        /// [TESTMETHOD]
        /// </summary>
        /// <param name="arr">Array to build the sum over</param>
        /// <returns>Sum of all elements in the given array</returns>
        public static int Sum(int[,] arr)
        {
            //get arr.Length of both dimensions
            int length1d = arr.GetLength(0);
            int length2d = arr.GetLength(1);
            //set the individual variables to 0
            int sum1d = 0;
            int sum2d = 0;
            int i = 0;
            int i2 = 0;
            int c = 0;

            //Doing first Row
            while (i < length1d)
            {
                int add = arr[0, i];

                sum1d += add;     
                i++;                
            }

            //Doing second to all rows
            if (c < length2d)
            {
                c++;
                i2 = 0;

                while (i2 < length1d)
                {
                    int add2 = arr[c, i2];

                    sum2d += add2;
                    i2++;

                }

             }
            Console.WriteLine("{0}, {1}", sum1d, sum2d);
            return sum1d+sum2d;

        }

        static void Main(string[] args)
        {
            int[,] myArr2D;
           myArr2D = new int[3, 3];
            myArr2D[0, 0] = 10;
            myArr2D[0, 1] = 11;
            myArr2D[0, 2] = 12;
            myArr2D[2, 0] = 13;
            myArr2D[1, 2] = 14;
            //Console.WriteLine("{0}", myArr2D[2, 0]);
            Console.WriteLine("{0}", Sum(myArr2D));
            Console.ReadKey();
        }
    }
}

2 个答案:

答案 0 :(得分:1)

也许你可以尝试这样的事情:

static void Main(string[] args)
    {
        int[,] myArr2D;
       myArr2D = new int[3, 3];
        myArr2D[0, 0] = 10;
        myArr2D[0, 1] = 11;
        myArr2D[0, 2] = 12;
        myArr2D[2, 0] = 13;
        myArr2D[1, 2] = 14;
        int sum = myArr2D.Cast<int>().Sum();
        Console.WriteLine(sum); // 60
        Console.ReadKey();
    }

答案 1 :(得分:1)

以正常方式迭代2d数组并求值。

int sum = 0;

for (int i = 0; i < arr.GetLength(0); i++)
{
    for (int j = 0; j < arr.GetLength(1); j++)
    {
        sum += arr[i, j];
    }
}

return sum;

这可以很容易地转换为while循环。

int sum = 0;

int i = 0;

while (i < arr.GetLength(0))
{
    int j = 0;
    while (j < arr.GetLength(1))
    {
        sum += arr[i, j];
        j += 1;
    }
    i += 1;
}

return sum;