所以我有一个问题,但我不确定原因。
public static int Suurin(int[,] luku)
{
int max = luku[0, 0];
for (int i = 0; i < luku.Length; i++)
{
for (int j = 0; j < luku.Length; i++)
{
if (max < luku[i, j]) // ERROR LINE
max = luku[i, j];
}
所以我只是不知道如何解决这个问题,任何人都可以帮助我吗?
答案 0 :(得分:9)
替换
for (int j = 0; j < luku.Length; i++)
与
for (int j = 0; j < luku.Length; j++)
我犯了这个错误的次数超过了我想承认的次数。
编辑:
虽然我上面发布的内容仍然正确,但如果您尝试获取任何维度中任何项目的最大值,则应该使用GetUpperBound()。
int max = luku[0, 0];
for (int i = 0; i <= luku.GetUpperBound(0); i++)
{
for (int j = 0; j <= luku.GetUpperBound(1); j++)
{
if (max < luku[i, j])
max = luku[i, j];
}
}
答案 1 :(得分:2)
问题是
对于二维数组,其长度是行和列的乘法(等于元素的总数)
例如,
int[,] luku = {{1,2,3}, {2,3,4}, {2,3,4}};
luku.Length
= row * column = 3 * 3 = 9
另一个例子,
int[,] luku = {{1,2,3,4}, {2,3,4,5}, {2,3,4,6}};
luku.Length
= row * column = 3 * 4 = 12
因此,您无法在嵌套For循环中使用luku.Length
来迭代二维数组中的所有元素。
因为您的 IndexOutofRange 异常超出范围的行和列索引。
使用Jodrell方法,
luku.OfType<int>().Max();
您可以使用
获取二维数组的最大值 public static int Suurin(int[,] luku)
{
int max = luku.OfType<int>().Max();
答案 2 :(得分:0)
而不是编写自己的循环,你可以做到
luku.OfType<int>().Max();
通常,避免使用多维数组并使用锯齿状数组或其他一些集合。多维数组很多层次都很糟糕。