该程序生成随机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();
}
答案 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];