我有一个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”,因此成功显示了“您赢了”的消息。这表明对角线的代码可以正常工作,但行和列不能正常工作。