For循环导致“越界”错误

时间:2018-03-28 14:21:04

标签: c#

我一直试图制作一个ludo游戏来学习更多关于C#的知识 不幸的是我遇到了一个我无法弄清楚的for循环,它给了我一个出界的错误。 我在这段代码中尝试做的是制作电路板(这是15x15阵列) 我正在为游戏板上的所有空白点分配值9,以便我以后可以轻松地玩它。

Quadrant 1可以实现预期目标,但它在Quadrant 2中给出了“Out of bound”错误。

// Make the 2D array (Game board)
int[,] GameBoard = new int[15, 15];

// Quadrant 1
for(int Blankspotx1 = 0; Blankspotx1 < 7; Blankspotx1++)
{
    GameBoard[Blankspotx1, 0] = 9;
    int Blankspoty1 = 0;
    for (Blankspoty1 = 0; Blankspoty1 < 7; Blankspoty1++)
    {
        GameBoard[Blankspotx1, Blankspoty1] = 9;
    }
    Blankspoty1 = 0;
}

// Quadrant 2
for (int Blankspotx2 = 10; Blankspotx2 < 16; Blankspotx2++)
{
    GameBoard[Blankspotx2, 0] = 9;

    int Blankspoty2 = 0;
    for (Blankspoty2 = 0; Blankspoty2 < 7; Blankspoty2++)
    {
        GameBoard[Blankspotx2, Blankspoty2] = 9;
    }
    Blankspoty2 = 0;
}

2 个答案:

答案 0 :(得分:6)

for (int Blankspotx2 = 10; Blankspotx2 < 16; Blankspotx2++)应该是 for (int Blankspotx2 = 10; Blankspotx2 < 15; Blankspotx2++)

任何从零开始的索引集合的最后一个索引是它的长度 - 1。

根据经验,最好使用集合的长度为1而不是对数字进行硬编码,以防止此类错误发生。

对于多维数组,使用GetLength(Int32)方法获取指定维度的长度,因此它是:

for (int Blankspotx2 = 10; Blankspotx2 < GameBoard.GetLength(0); Blankspotx2++)

for (int Blankspotx2 = 10; Blankspotx2 <= GameBoard.GetLength(0)-1; Blankspotx2++)

答案 1 :(得分:0)

数组基于零计数。所以你需要让for循环达到15而不是16.第十五个元素是“超出界限”

 // Quadrant 2
for (int Blankspotx2 = 10; Blankspotx2 < 15; Blankspotx2++)
{
    GameBoard[Blankspotx2, 0] = 9;

    int Blankspoty2 = 0;
    for (Blankspoty2 = 0; Blankspoty2 < 7; Blankspoty2++)
    {
        GameBoard[Blankspotx2, Blankspoty2] = 9;
    }
   Blankspoty2 = 0;
 }