多维char数组的IndexOutOfRangeException

时间:2014-05-05 23:46:40

标签: c# arrays for-loop multidimensional-array indexoutofrangeexception

代码遍历数组并将每个索引初始化为' *'。不过,我在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
        }
    }
  • 有关说明GridHeightGridWidth声明如下

    public const int GridHeight = 5;

    public const int GridWidth = 7;

2 个答案:

答案 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 (向上,向下,升序)。