检查可缩放矩阵对角线是否有相同的字符串

时间:2015-02-20 14:28:57

标签: java matrix

我正在创建一个可扩展的TicTacToe程序,当我尝试检查字符串的对角线时,我遇到了一个问题。

我可以使用此方法检查行:

    public boolean checkRowsForWin(String b){
    //Check all the rows for a winner
    for(int y = 0; y < size; y++){
        for (int x = 0; x < size; x++){
            if (globalGrid[y][x].equals(b)){
                inRow++;
                if (inRow >= neededToWin){
                    return true;
                }
            }else{
                inRow = 0;
            }
        }
        inRow = 0;
    }
    inRow = 0;
    return false;
}

我尝试过for循环和if语句的组合,我的上一次修改如下所示。如果对角线仅包括右上角,当我需要它来检查即使对角线不在角落时也能正常工作。

    public boolean checkDiagForWin(String b, int c, int d){
    for (int x = c, y = d; x < size && y < size; x++, y++){
        if (globalGrid[y][x].equals(b)){
            inRow++;
            if (inRow >= neededToWin){
                return true;
            }
        }
        else{
            inRow = 0;
        }
        inRow = 0;
        for (int x2 = size - 1, y2 = 0; x2 >=0 && y2 < size; x2--, y2++){
            if (globalGrid[y2][x2].equals(b)){
                inRow++;
                if (inRow >= neededToWin){
                    return true;
                }
            }
            else{
                inRow = 0;
            }
        }
        inRow = 0;
    }   
    inRow = 0;
    return false;
}

连续的数量和电路板的尺寸可以改变,所以它不像检查位置附近的两个那么简单。

1 个答案:

答案 0 :(得分:1)

您需要从每个可能的位置开始流程,一个可能的实现可能是:

在每个位置开始检查过程的功能:

public boolean checkDiagonals(String b) {
    /* Check the diagonals starting in every position */
    for (int i = 0; i < size; i++) {
        for (int j = 0; j < size; j++) {
            if (checkDiagonalForWin(b, i, j) || checkOtherDiagonalForWin(b, i, j)) {
                return true;
            }
        }
    }
    return false;
}

有一些功能可以检查从某个位置开始的对角线:

public boolean checkDiagonalForWin(String b, int row, int col){

    for (int inRow = 0; row  < size && col < size; row++, col++) {
        //Check all the rows for a winner
        if (globalGrid[row][col].equals(b)){
            inRow++;
            if (inRow >= neededToWin){
                return true;
            }
        }else{
            inRow = 0;
        }
    }
    return false;
}


public boolean checkOtherDiagonalForWin(String b, int row, int col){        
    for (int inRow = 0; row  < size && col >= 0; row++, col--) {
        //Check all the rows for a winner
        if (globalGrid[row][col].equals(b)){
            inRow++;
            if (inRow >= neededToWin){
                return true;
            }
        }else{
            inRow = 0;
        }
    }
    return false;
}