访问2d数组的元素时出现问题(仅生成一列).-JAVA



在我介绍编码课程的最后一个项目中,当我尝试打印/修改/访问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");
}

这将清理您的输出,让您更好地了解其他问题所在。

最新更新