c# indexoutorange数组异常

本文关键字:异常 数组 indexoutorange | 更新日期: 2023-09-27 18:14:49

我试图创建一个2D字符数组来保存字符网格,这将用作2D主机游戏的一种"地图"。

我得到了一个:

indexoutorange异常

. .我不明白为什么。我已经在调试模式下完成了代码,但仍然看不到问题。

它通过代码很好地步进,直到它到达X = 25Y = 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("");
    }
}

c# indexoutorange数组异常

变化

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

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

,对width做同样的处理。

编辑:这是因为数组索引从数字0开始,以数组长度减去1结束。

此异常表示您访问了一个无效的索引。从你写循环的方式,我可以看出你认为索引是从1到数组的长度。不过,数组是从零开始的。使用标准的循环形式:

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

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

您的程序可能会受益于代码审查堆栈交换站点。