Я предполагаю, что есть 3 уникальных значения для состояний каждого элемента, таких как, например:
board[row][col] = 0 // no entry
board[row][col] = 1 // player 1
board[row][col] = 2 // player 2
Не будучи умным, горизонтальная проверка для player
(с использованием основной структуры строки) будет выглядеть так:
(board[0][0] == player && board[0][1] == player && board[0][2] == player)
и повторять для каждой строки.
И аналогично для вертикальной, повторяя для каждого столбца:
(board[0][0] == player && board[1][0] == player && board[2][0] == player)
И одна диагональ:
(board[0][0] == player && board[1][1] == player && board[2][2] == player)
Если вы решили использовать арифметическую операцию c, вам придется изменить значения "player", чтобы избежать наложения, как в игроке 1 == 1 и игроке 2 == 4, например :
board[row][col] = 0 // no entry
board[row][col] = 1 // player 1
board[row][col] = 4 // player 2
Тогда вы можете сделать что-то вроде горизонтальной строки:
((board[0][0] + board[0][1] + board[0][2]) == (player * 3))
Заметьте в Java 8 и позже добавив массив int (строку или столбец в вашем случае ) может быть немного более кратким:
// sum the first row
(IntStream.of(board[0]).sum() == (player * 3))
Теперь, если вы действительно хотите использовать побитовую операцию «и», тогда это ваша проверка, принимающая начальные значения элемента (0,1,2), как указано вверху:
// check if the player's "bit" is set in all elements of first row.
(board[0][0] & board[0][1] & board[0][2]) == player