Java- 在一个条件下通过 Array 向后迭代
Java- Iterating backwards through Array under a condition
所以对于我的一个游戏模型,有一个元素数组表示为字符串“--X-X”,因此该棋盘有 5 个方框,位置为 0-4。每个'X'只能向左移动。有一个 "X-Index",所以如果我 运行 getIXPosition(1) 它将 return 第一个 X 的位置,即 2。getXPosition(2) 将 return 第二个X 的位置是 4。所以弦板是“--X-X”,但在我的代码中它表示为一个数组“00102”,这样我就可以跟踪 xIndex。
现在我的问题是我需要制作一个移动方法来防止第二个 x 跳过第一个 X 进入位置 1 或 0。这在这个游戏中是不允许的。我以为我正确地编写了方法,但是当我测试以确保第二个 X 不能跳过它之前的任何 X 时,我的测试没有通过。
public void move(int xIndex, int newPosition)
{
int oldPosition = getXPosition(xIndex);
for(int i= oldPosition - 1; i >= 0;i--)
{
while (board[i] == 0 )
{
board[oldPosition] = '0'; // so this spot is open '-'
board[newPosition] = xIndex;
}
throw new IllegalArgumentException("Error cannot move X to new position");
}
}
我做错了什么?
如果您知道要移动到的位置,则无需搜索,直接移动即可。
if (board[newPosition] == '0') {
board[newPosition[ = xIndex;
board[oldPosition] = '0';
} else {
throw new IllegalArgumentException("Error cannot move X to new position");
}
注意:字符'0'
不是值0
(实际上是ASCII的48)
我认为代码有点缺陷。首先,我认为您不需要一直迭代到 0
。你应该只迭代直到你点击 newPosition
.
那么while
循环就没有多大意义了。我想你是在 if
.
最后,就我个人而言,我不会在这种情况下抛出 IllegalArgumentException
(实际上,不管怎样,您都会在第一次迭代后抛出,所以这是另一个缺陷)。有问题的是董事会的状态,而不是争论。如果其中一个参数是否定的,我可能会抛出 IllegalArgumentException
public void move(int xIndex, int newPosition) {
int oldPosition = getXPosition(xIndex);
for(int i= oldPosition - 1; i >= newPosition; i--) {
if(board[i] == '0') {
board[oldPosition] = '0';
board[i] = xIndex;
oldPosition = i;
} else {
//throw some custom exception; we found the other X here.
}
}
}
所以对于我的一个游戏模型,有一个元素数组表示为字符串“--X-X”,因此该棋盘有 5 个方框,位置为 0-4。每个'X'只能向左移动。有一个 "X-Index",所以如果我 运行 getIXPosition(1) 它将 return 第一个 X 的位置,即 2。getXPosition(2) 将 return 第二个X 的位置是 4。所以弦板是“--X-X”,但在我的代码中它表示为一个数组“00102”,这样我就可以跟踪 xIndex。
现在我的问题是我需要制作一个移动方法来防止第二个 x 跳过第一个 X 进入位置 1 或 0。这在这个游戏中是不允许的。我以为我正确地编写了方法,但是当我测试以确保第二个 X 不能跳过它之前的任何 X 时,我的测试没有通过。
public void move(int xIndex, int newPosition)
{
int oldPosition = getXPosition(xIndex);
for(int i= oldPosition - 1; i >= 0;i--)
{
while (board[i] == 0 )
{
board[oldPosition] = '0'; // so this spot is open '-'
board[newPosition] = xIndex;
}
throw new IllegalArgumentException("Error cannot move X to new position");
}
}
我做错了什么?
如果您知道要移动到的位置,则无需搜索,直接移动即可。
if (board[newPosition] == '0') {
board[newPosition[ = xIndex;
board[oldPosition] = '0';
} else {
throw new IllegalArgumentException("Error cannot move X to new position");
}
注意:字符'0'
不是值0
(实际上是ASCII的48)
我认为代码有点缺陷。首先,我认为您不需要一直迭代到 0
。你应该只迭代直到你点击 newPosition
.
那么while
循环就没有多大意义了。我想你是在 if
.
最后,就我个人而言,我不会在这种情况下抛出 IllegalArgumentException
(实际上,不管怎样,您都会在第一次迭代后抛出,所以这是另一个缺陷)。有问题的是董事会的状态,而不是争论。如果其中一个参数是否定的,我可能会抛出 IllegalArgumentException
public void move(int xIndex, int newPosition) {
int oldPosition = getXPosition(xIndex);
for(int i= oldPosition - 1; i >= newPosition; i--) {
if(board[i] == '0') {
board[oldPosition] = '0';
board[i] = xIndex;
oldPosition = i;
} else {
//throw some custom exception; we found the other X here.
}
}
}