我一直试图制作一个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;
}
答案 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;
}