public class TicTacToeModel {

    double xpos,ypos,xr,yr;
    char[][] position = {{' ',' ',' '},
                         {' ',' ',' '},
                         {' ',' ',' '}};

    /**
     * Turns row, col into the center of the cells of any screen of resolution h by w.
     * This is ideal for the view.
     */
    public void computePos(int row, int col, int h, int w){
        xpos=(col+0.5)*w/3.0;
        ypos=(row+0.5)*h/3.0;
        xr=w/8.0;
        yr=h/8.0;
    }


如果xpos ypos的单元格为空,则isEmpty()返回true。这不能验证xpos和ypos是否在范围内,我该怎么做呢?

public boolean isEmpty(int xpos, int ypos){
    boolean isPosWithinRange = xpos>=0 && xpos<9 && ypos>=0 && ypos<9;
    return (position[xpos][ypos] == ' ' && isPosWithinRange);
}


O放在xpos和ypos位置。没有其他验证。

public void placeO(int xpos, int ypos) {
            if(isEmpty(xpos, ypos)) {
                position[xpos][ypos]='O';
        }

}

最佳答案

首先,您应该测试xposypos在0-2之间:

boolean isPosWithinRange = xpos>=0 && xpos<3 && ypos>=0 && ypos<3;


其次,如果不是,则不应检查该单元格的值,因为它是无效的单元格。通过更改return语句中检查的顺序,使用&&short circuit属性:

return isPosWithinRange && position[xpos][ypos] == ' ';

09-16 03:31