This is the cleaner code, thanks to OriginalGriff explanation, well for diagonal, I think manual index check is better than looping diagonally since 0,4,8 and 2,4,6 have different increment
Player currentPlayer;
private final Player[] boardOwned = new Player[9];
public boolean hasWinner() {
return checkHorizontal() || checkVertical() || checkDiagonal();
}
private boolean checkVertical() {
for (int j = 6; j < 9; j += 1) {
if (boardOwned[j] != null && boardOwned[j] == boardOwned[j - 3] &&
boardOwned[j] == boardOwned[j - 6])
{
return true;
}
}
return false;
}
public boolean checkHorizontal() {
for (int j = 1; j < 8; j += 3) {
if (boardOwned[j] != null && boardOwned[j] == boardOwned[j-1] && boardOwned[j] == boardOwned[j+1]) {
return true;
}
}
return false;
}
private boolean checkDiagonal(){
return (boardOwned[0] != null && boardOwned[0] == boardOwned[4] && boardOwned[0] == boardOwned[8])
|| (boardOwned[2] != null && boardOwned[2] == boardOwned[4] && boardOwned[2] == boardOwned[6]);
}