public class Gameboard
{
public char[][] board;
public static void main(String args[])
{
Gameboard blank = new Gameboard(false);
System.out.println("Printing blank gameboard:n" + blank + "n");
}
public Gameboard(boolean setup)
{
char[][] board = new char[8][8];
if (!setup)
{
for(int i = 0; i < board.length;i++)
{
for(int j = 0; j < board[j].length;j++)//critical condition
{
board[i][j] = '-';
}
}
}
}
}
我知道列长的长度不是行长,而是2D阵列的长度和列的长度相同。
您的逻辑不在这里,因为i
通过第一个维度计数,而j
通过第二个维度计算:您真正想要的是
for(int i = 0; i < board.length; i++)
{
for(int j = 0; j < board[i].length; j++)
{
board[i][j] = '-';
}
}
这个问题当然是以下行:
for (int j = 0; j < board[j].length; j++)
您将j
用作板数组第一维的索引,但将其定义为一个值,最大长度等于第二维度的长度。当然,哪个使您有机会将索引超出范围,这正是该代码所产生的。
您有问题的原因是两个维度都一样,是因为for循环退出的条件会重新评估每个循环。
逻辑是:
j < board[j].length
所以在7点您得到:
7 < board[7].length
与:
相同7 < 8
很棒的经过,所以经过另一个循环,但是在8时发生了什么?
8 < board[8].length
井8不在板阵列的范围内,因此它引发了例外,它根本无法对其进行评估。但是,变量i
永远不会达到8,它停止在7,因此在这种情况下您永远不会从范围中获得索引。
如果您做了以下操作(但不良练习(:
for(int j = 0; j < board[0].length; j++)