检查二维数组的行,列和对角线中的字符是否相同

时间:2018-10-04 00:25:58

标签: java arrays multidimensional-array rows

我有一个2D数组(大小由用户确定,但具有相同的行数和列数),其中存储了不同的字符。字符为'o''b''g'。我必须制作一个函数/方法来接收一个字符(假定仅是上述3个字符之一)并扫描2D数组,如果该数组中的整行,整列或整对角线都只有该字符由函数/方法接受,此函数返回true,否则返回false

例如:如果数组看起来像这样并且字符'o'是该函数的输入:

g g b o
g b o o
g o b b
o b g g

然后该函数返回true,因为次对角线是ALL字符'o'。但是,如果'g'是函数的输入,则该函数返回false,因为没有整行,整列或整对角线只是字符'g'

我有以下用于搜索行,列和对角线的代码,但是我无法获得检查行和列是否正常工作的代码,而对两个对角线进行检查的代码都可以正常工作。

public boolean wins(char symbol){
    boolean winRow = true;
    boolean winCol = true;
    boolean winDiagMajor = true;
    boolean winDiagMinor = true;
    boolean winOverall = true;

    //Checks rows.
    for (int i = 0; i < gameBoard.length; i++){
        if (gameBoard[i][0] == symbol) {
            for (int j = 0; j < gameBoard[i].length; j++){
                if(gameBoard[i][0] != gameBoard[i][j]) {
                    winRow = false;
                }
            }
        } else {
            winRow = false;
        }
    }

    //Checks Columns.
    for (int j = 0; j < boardSize; j++){
        if (gameBoard[0][j] == symbol) {
            for (int i = 1; i < boardSize; i++){
                if(gameBoard[0][j] != gameBoard[i][j]) {
                    winCol = false;
                }
            }
        } else {
            winCol = false;
        }
    }

    //Checks Major Diagonal.
    if (gameBoard[0][0] == symbol) {
        for (int i = 0; i < gameBoard.length; i++) {
            if (gameBoard[i][i] != gameBoard[0][0]) {
                winDiagMajor = false;
            }
        }
    } else {
        winDiagMajor = false;
    }

    //Checks Minor Diagonal.
    for(int i = 0, j = gameBoard.length; i < gameBoard.length; i++, j--) {
        if (gameBoard[i][j] == symbol) {
            if (gameBoard[i][j] != gameBoard[i][gameBoard.length - 1]) {
                winDiagMinor = false;
            }
        }
    }

    if (winRow == false && winCol == false && winDiagMajor == false && winDiagMinor == false) {
        winOverall = false;
    } else {
        winOverall = true;
    }

    return winOverall;
}

编辑

测试数组1:学校提供了一些代码,在整行,整列或对角线仅将字符输入到函数后,该窗口应显示“ you win”。我的测试数组1如下,其中'b'为输入字符:

o b o
o b g
g b g

即使第1列全为字符“ b”,也不会显示“您赢了”消息。

使用“ o”作为输入字符测试数组2:

b g o
g o b
o g b

由于次对角线均为字符“ o”,因此成功显示了“您赢了”的消息。这表明对角线的代码可以正常工作,但行和列不能正常工作。

0 个答案:

没有答案