代码遍历数组并将每个索引初始化为' *'。不过,我在IndexOutOfRangeException
上获得Cave[i,j]
并希望得到一些指导。
char[,] Cave = new char[GridHeight, GridWidth];
for (int i = 0; i < GridWidth; i++)
{
for (int j = 0; j < GridHeight; j++)
{
Cave[i, j] = '*'; //Error Here
}
}
有关说明GridHeight
,GridWidth
声明如下
public const int GridHeight = 5;
public const int GridWidth = 7;
答案 0 :(得分:2)
您正在声明一个5 x 7数组,但之后尝试访问(例如)Cave[7,5]
,因为您的变量是向后的。
char[,] Cave = new char[GridHeight, GridWidth]; // declare 5x7 array
for (int i = 0; i < GridWidth; i++) // range of i is 0 - 6
{
for (int j = 0; j < GridHeight; j++) // range of j is 0 - 4
{
Cave[i, j] = '*'; //Error Here // try to access Cave[6,4] - oops!
}
}
尝试交换它们:
char[,] Cave = new char[GridWidth, GridHeight];
如果对你更有意义,可以交换另一对:
char[,] Cave = new char[GridHeight, GridWidth];
for (int i = 0; i < GridHeight; i++)
{
for (int j = 0; j < GridWidth; j++)
{
Cave[i, j] = '*';
}
}
答案 1 :(得分:1)
通常我们看事物的方式和编译器的方式都不一样。
这是你的程序输出:
int GridHeight = 10;
int GridWidth = 5;
char[,] Cave = new char[GridHeight, GridWidth];
for (int i = 0; i < GridWidth; i++)
{
for (int j = 0; j < GridHeight; j++)
{
Console.Write(i+","+ j +" ");
// Cave[i, j] = '*'; //Error Here
}
Console.WriteLine();
}
输出:
0,0 0,1 0,2 0,3 0,4 0,5 0,6 0,7 0,8 0,9
1,0 1,1 1,2 1,3 1,4 1,5 1,6 1,7 1,8 1,9
2,0 2,1 2,2 2,3 2,4 2,5 2,6 2,7 2,8 2,9
3,0 3,1 3,2 3,3 3,4 3,5 3,6 3,7 3,8 3,9
4,0 4,1 4,2 4,3 4,4 4,5 4,6 4,7 4,8 4,9
如您所见,第一个变量是实际宽度,而不是高度。所以要么重命名它们,要么交换它们:)
每当你想到一个二维数组(至少是控制台输出)时,记住第一个轴是X
(从左到右,升序),第二个轴是{{1 (向上,向下,升序)。