2015-09-26 80 views
3

我正在尝试创建一个2D字符数组以容纳一个字符网格,这将用作2D地形游戏的'地图'。C#IndexOutOfRange数组异常

我得到一个:

IndexOutOfRange例外

..和不明白为什么。我已经在调试模式下遍历代码,仍然无法看到问题。

它通过代码罚款,直到它击中我的网格的右上边界X = 25Y = 1

我有_gameWidth_gameHeight创建如下的主要外但仍在类中:

static int _gameWidth = 25; 
static int _gameHeight = 15; 

以下是失败,尝试生成并填充网格时的代码。它未能在这一点上:

else if (x == _gameWidth && y == 1) 
    _grid[x, y] = '╕'; 



static void GenerateGrid() 
{ 
    for (int y = 1; y <= _gameHeight; y++) 
    { 
     for (int x = 1; x <= _gameWidth; x++) 
     { 
      if (x == 1 && y == 1) 
       _grid[x, y] = '╒'; 
      else if (x == _gameWidth && y == _gameHeight) 
       _grid[x, y] = '╛'; 
      else if (x == _gameWidth && y == 1) 
       _grid[x, y] = '╕'; 
      else if (x == 1 && y == _gameHeight) 
       _grid[x, y] = '╘'; 
      else if ((x != 1 && y == _gameHeight) || (x != _gameWidth && y == 1)) 
       _grid[x, y] = '═'; 
      else if ((x == 1 && y > 1 && y < _gameHeight) || (x == _gameWidth && y > 1 && y < _gameHeight)) 
       _grid[x, y] = '│'; 
      else 
       _grid[x, y] = 'x'; 

     } 
     Console.WriteLine(""); 
    } 
} 
+1

我们错过了'grid [,]' –

+0

问题的解决。感谢您的快速回复。 – Tinderlog

回答

3

此异常结束意味着你已经访问了一个无效索引。从你写循环的方式来看,我可以说你认为索引从1到数组的长度。不过,数组基于零。使用标准循环表格:

for (int i = 0; i < length; i++) 

您的循环从一开始。您可以使用Visual Studio for循环模板。只需输入"for<tab><tab>"

您的程序可能受益于Code Review Stack Exchange站点。

5

变化

for (int i = 1; i <= gameHeight; i++) 

for (int i = 0; i < gameHeight; i++) 

和宽度这样做。

编辑: 这是因为数组的索引以数字0开始,并与所述阵列的长度减1

+0

我很喜欢这个答案,尽管另一个被选为正确的答案,这个答案有更多的选票:p – Rariolu