在不到10行之前我已经访问了该索引后超出索引范围

时间:2019-02-14 16:30:43

标签: c# indexoutofboundsexception

我正在创建一个小的文本地牢爬虫,并且该地牢的每一层都是二维数组的房间。由于某种原因,当您到达第三层时,在创建数组并确保将所有房间都设置为null之后,当我在到达floor3 [1,0]时立即设置房间时,它会抛出索引范围。

使用断点并查看数组,它显然具有[1,0]以及[0,0]和[9,6]之间的所有其他值。我运行一个for循环,该循环访问该索引并将其设置为null,并尝试更改for循环以改为将所有房间更改为测试房间,并且这样做没有问题。我检查了十几次,以确保没有错别字,或者我试图打错地板或类似的东西。我还只编写了一条简单的Console.Writeline(floor [1,0])测试行,以确保我不仅仅是错别字,我删除了该行,并且该行也发生在该点之后。同样,相同的方法适用于1楼和2楼。

floor3 = new RoomClass[9, 6];

//loop through everything and make sure that it's empty
for (int i = 0; i < 9; i++)
{
    for (int j = 0; j < 6; j++)
    {
        floor3[i, j] = null;
    }
}

//create rooms that actually need to exist.
floor3[0, 0] = new RoomClass("test1.", false, 0, 0);
floor3[0, 1] = new RoomClass("test2.", false, 0, 1);
floor3[0, 2] = new RoomClass("test5.", false, 0, 2);
floor3[0, 3] = new RoomClass("test3.", false, 0, 3);
floor3[0, 4] = new RoomClass("test4.", false, 0, 4);
floor3[0, 5] = new RoomClass("test5.", false, 0, 5);
floor3[0, 6] = new RoomClass("test5.", false, 0, 6);

floor3[1, 0] = new RoomClass("test6.", false, 1, 0);
floor3[1, 3] = new RoomClass("test7.", false, 1, 3);
floor3[1, 6] = new RoomClass("test8.", false, 1, 6);

floor3[2, 0] = new RoomClass("test9.", false, 2, 0);
(etc.)

这应该只浏览所有重要索引并为每个索引创建一个空间。

1 个答案:

答案 0 :(得分:2)

floor3[0,6]在数组的边界之外。

floor3[1,6]一样,但不会那么远。

请注意,您的循环条件确保j小于 6j的最高值为5