C#System.IndexOutOfRangeException但程序正在运行

时间:2016-01-21 19:30:25

标签: c#

该程序生成随机2d数组并计算每行的最大值。我确实有正确的结果,但如果列数不等于行数,则IndexOutOfRangeException会弹出。

Random r = new Random();

int x,y;

Console.WriteLine("lines");
x = int.Parse(Console.ReadLine());

Console.WriteLine("columns");
y = int.Parse(Console.ReadLine());

if ((x < 1) || (y < 1))
{
    Console.WriteLine("Error");
    Console.ReadLine();
}
else
{
    int[,] array1 = new int[x, y];

    int[] array2 = new int[y];

    for (int i = 0; i < x; i++)
    {
        for (int j = 0; j < y; j++)
        {
            array1[i, j] = r.Next(0, 51);
            Console.Write(array1[i, j] + " ");

        }
        Console.WriteLine();
    }

    for (int j = 0; j < y; j++)
    {
        int max = array1[j, 0];

        for (int i = 1; i < x; i++)
        {
            if (array1[j, i] > max)
            {
                max = (array1[j, i]);
            }
            else
            {

            }
        }
        array2[j] = max;
        Console.WriteLine();
        Console.Write(array2[j]);
    }

    Console.ReadLine();
}

1 个答案:

答案 0 :(得分:5)

在您第二次传递数据时(首先按行而不是按行进行),这个:

if (array1[j, i] > max)
{
    max = (array1[j, i]);
}

应如下所示:

if (array1[i, j] > max)
{
    max = (array1[i, j]);
}

更改处理行和列的顺序不会更改数组的尺寸。

编辑:根据@ csharpfolk的评论,这一行还需要修复:

int max = array1[j, 0];

可能是:

int max = array1[0, j];