这个游戏是一个3D版本的tic-tac-toe,有3个板。板上的每个位置都由[x,y,z]坐标组成。 x是电路板的编号,y,z是该电路板上的坐标。我正在尝试定义一种方法,只允许你从游戏的前9轮中的第一块棋盘中进行选择,但是我遇到了问题。这是代码。
public void set(Position p, int v) throws IOException {
if (board[p.x][p.y][p.z]!= 0) throw new IOException("Position taken");
board[p.x][p.y][p.z] = v;
我不确定在这个方法中添加什么只允许在前9轮上进行一次移动。我尝试过使用像if语句这样的计数器,如...
public void set(Position p, int v) throws IOException {
int counter = 0;
if (board[p.x][p.y][p.z]!= 0) throw new IOException("Position taken");
board[p.x][p.y][p.z] = v;
while (counter < 10) {
if (p.x != 1) throw new IOException("Invalid Move");
}
当我尝试使用同一方法的其他操作版本时,我每次都会出现“无效移动”错误,即使p.x等于1.有关如何循环此方法或任何其他方法来完成此操作的建议吗?
答案 0 :(得分:1)
你真的应该做自己的学习,而不是要求我们为你做家庭作业。我不打算回答你的问题,但我会指出你的代码有几个很大的问题:
1:计数器在set方法范围内,因此在该方法的开头总是设置为零,即使这是第20次转弯。 2:计数器永远不会递增,因此总是具有其初始值。 3:Java中的数组从零开始而不是一个。 4:IOException不适合抛出此方法,因为它没有执行任何IO。
答案 1 :(得分:0)
[...] 只允许您在游戏的前9个回合中从第一个棋盘中选择 [...]
请注意,数组的 first 元素的索引为0,因此您可能需要更改
p.x != 1
到
p.x != 0
另外,我认为您遇到了问题:
int counter = 0;
// ...
// ...
while (counter < 10) {
if (p.x != 1)
throw new IOException("Invalid Move");
}
因为它将进入无限循环。
您可能希望将counter
作为成员变量,并在移动方法中执行counter++
(如果移动成功)。