所以,我正在研究一个项目,我无法让它停止走出界限。方法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];
}
答案 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]之间的函数。