在我介绍编码课程的最后一个项目中,当我尝试打印/修改/访问2D数组中的元素时,遇到了一个问题。长话短说,我正在构建一个连接四个游戏,并得到了一些完整和不完整的类来组合生成游戏。
column类(包含第二个值数组char,也称为column(下的一个方法被称为get,代码如下:
public char get(int row) {
row = height;
if(row < 7 && row > 0) {
System.out.println(column[row]);
return column[row];
} else {
char invalid = ' ';
return invalid;
}
}
目前,游戏会提示用户输入要分配给玩家类的名称,然后显示游戏,然后还提示用户输入列号以将其代币(X(添加到棋盘中,并将其自动添加到列的底部。makeMove方法的代码是:
public boolean makeMove(int column, char token) {
boolean success = false;
char columnConverter = (char)column;
if(column > 7 && column < 1) {
System.out.println("Sorry, that's not a valid column!");
success = false;
} else {
board[column].put(token);
System.out.println(board[column].put(token));
success = true;
}
return success;
}
实际放置代币的代码是:
public boolean put(char token) {
if (height <= MAX_HEIGHT) {
column[height] = token;
height++;
return true;
} else {
return false;
}
}
当我调用游戏的显示方法时,输出(以及顶部的代码(如下:
public void display() {
System.out.println("1 2 3 4 5 6 7");
for(int i = 0; i < board.length; i++) {
for(int j = 0; j < NUM_ROWS; j++)
System.out.println("[" + board[i].get(j) + "]");
}
System.out.println("1 2 3 4 5 6 7");
}
输出:
Welcome to Nibble Nabble! What's your name?
Alex
1 2 3 4 5 6 7
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
1 2 3 4 5 6 7
Alex > 0
true
正因为如此,我相当确定get方法存在问题,但我完全不知道需要解决什么问题。如果在用户提示中输入任何大于0的值,我还会得到ArrayIndexOutOfBoundsException。
您几乎肯定需要解决的一件事是不在每个元素后面打印换行符。只在每行的末尾打印一行换行符。您可能应该从get
方法中删除println
,我认为这会给您带来麻烦,而不是帮助。
public void display() {
System.out.println("1 2 3 4 5 6 7");
for(int i = 0; i < board.length; i++) {
for(int j = 0; j < NUM_ROWS; j++)
System.out.print("[" + board[i].get(j) + "] ");
System.out.println("");
}
System.out.println("1 2 3 4 5 6 7");
}
这将清理您的输出,让您更好地了解其他问题所在。