帮助操纵3D阵列

时间:2010-12-10 08:34:21

标签: java

这个游戏是一个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.有关如何循环此方法或任何其他方法来完成此操作的建议吗?

2 个答案:

答案 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++(如果移动成功)。