数组越界。如何阻止消极

时间:2014-12-10 02:05:51

标签: java arrays indexoutofboundsexception

所以,我正在研究一个项目,我无法让它停止走出界限。方法getPiece(row,col)从2d数组返回自定义类的值。该阵列在两个方向上从0到7。我必须拥有它,以便行和col永远不会消极或超过7.请帮助。这是我的代码:

public boolean moveLegal(Move m){

        if (getPiece(m.getRow(), m.getColumn()).getType() != Piece.BLANK)
            return false;
        for (int dx = -1; dx <= 1; dx++){
            for (int dy = -1; dy <= 1; dy++){
                if (dx == 0 && dy == 0) 
                    continue;
                if (vectorLegal(m, dx, dy)) 
                    return true;
            }
        }
        return false;
    }

这就是信息传递到

的内容
private boolean vectorLegal(Move m, int dx, int dy){
        int x = m.getRow() + dx;
        int y = m.getColumn() + dy;
        if (!getPiece(x,y).equals(m.getPlayer().getPiece().getOpposite())) 
            return false;
        x += dx; y += dy;
        while (onBoard(x,y)){
            Piece here = getPiece(x,y);
            if (here.opposite(m.getPlayer().getPiece())) 
                continue;
            if (here.equals(m.getPlayer().getPiece())) 
                return true;
            x += dx; y += dy;
            return false;
        }
        return false;
    }

感谢您对我的问题的帮助。

编辑: 这是访问数组

的piece方法
public Piece getPiece(int row, int column){  
    return board[row][column];
}

2 个答案:

答案 0 :(得分:2)

试试这个

   public boolean legal(int x,int y){return !(x>7||x<0||y<7||y<0);}

并把它放在一边......  你没有告诉我,如果是非法的,应该发生帽子......  必须先在if语句中调用它,否则它将在检查之前崩溃

   if (legal(x,y)&&!getPiece(x,y).equals(m.getPlayer().getPiece().getOpposite())) 
   if(!legal())//some code to get out of here
    Piece here = getPiece(x,y);

答案 1 :(得分:0)

在调用getPiece之前,需要一个检查x,y值是否仍然在[0..7] [0..7]之间的函数。