我还在学习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();
}
}
}
答案 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;