索引超出了数组的范围

时间:2014-02-20 14:06:05

标签: c#

所以我有一个问题,但我不确定原因。

    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];

            }

所以我只是不知道如何解决这个问题,任何人都可以帮助我吗?

3 个答案:

答案 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();

通常,避免使用多维数组并使用锯齿状数组或其他一些集合。多维数组很多层次都很糟糕。