Java-在条件下向后遍历Array

时间:2015-04-19 18:25:48

标签: java arrays for-loop iteration

因此,对于我的一个游戏模型,有一个元素数组表示为字符串“--X-X”,因此该板有5个框,位置为0-4。每个'X'只能向左移动。有一个“X-Index”,这样如果我运行getIXPosition(1),它将返回第一个X的位置,即2.并且getXPosition(2)将返回第二个X的位置,即4.所以字符串板是“ --XX“但在我的代码中,它表示为一个数组为”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");  
    }
}

我做错了什么?

2 个答案:

答案 0 :(得分:1)

如果您知道要移动的位置,则无需搜索,只需移动到那里。

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)

答案 1 :(得分:0)

我认为代码有点缺陷。首先,我认为你不需要一直迭代到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.
        }
    }
}