我正在尝试创建一个2D字符数组来保存字符网格,这些字符将用作2D控制台游戏的一种“地图”。
我得到了:
IndexOutOfRange异常
..并且看不出原因。我已经在调试模式中逐步完成了代码,仍然无法看到问题。
它会逐步完成代码,直到它到达我的网格右上角的X = 25
和Y = 1
。
我创建了_gameWidth
和_gameHeight
,如下所示,在main之外但仍然在类中:
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("");
}
}
答案 0 :(得分:5)
更改
for (int i = 1; i <= gameHeight; i++)
到
for (int i = 0; i < gameHeight; i++)
并为宽度做同样的事。
编辑: 这是因为数组索引从数字0开始,以数组长度减1结束。
答案 1 :(得分:3)
此异常表示您访问了无效索引。从你编写循环的方式我可以看出你认为索引从1到数组的长度。但是,数组是从零开始的。使用标准循环形式:
for (int i = 0; i < length; i++)
你的循环从一开始。您可以使用Visual Studio for
循环模板。只需输入"for<tab><tab>"
。
您的程序可能会受益于Code Review Stack Exchange站点。