用字符串数组作为井字游戏的游戏板 board,判断该游戏板有没有可能最终形成
    游戏板是一个 3 x 3 数组,由字符 “ “,”X” 和 “O” 组成。字符 “ “ 代表一个空位。
    两个玩家轮流将字符放入空位,一个玩家执X棋,另一个玩家执O棋
    “X” 和 “O” 只允许放置在空位中,不允许对已放有字符的位置进行填充。
    当有 3 个相同(且非空)的字符填充任何行、列或对角线时,游戏结束,board生成
    分类讨论

    1. public static boolean validBoard(String[] board) {
    2. int xCount = 0;
    3. int oCount = 0;
    4. for (String row : board)
    5. for (char c : row.toCharArray()) {
    6. if (c == 'X') {
    7. xCount++;
    8. }
    9. if (c == 'O') {
    10. oCount++;
    11. }
    12. }
    13. //X与O 一样多,或者X比O多一个(X赢则X多一个,O赢则一样多)
    14. if ((oCount != xCount) && (oCount != (xCount - 1))) {
    15. return false;
    16. }
    17. if (win(board, "XXX") && (oCount != (xCount - 1))) {
    18. return false;
    19. }
    20. if (win(board, "OOO") && (oCount != xCount)) {
    21. return false;
    22. }
    23. return true;
    24. }
    25. public static boolean win(String[] board, String flag) {
    26. for (int i = 0; i < 3; ++i) {
    27. //纵向3连
    28. if (flag.equals("" + board[i].charAt(0) + board[i].charAt(1) +
    29. board[i].charAt(2))) {
    30. return true;
    31. }
    32. //横向3连
    33. if (flag.equals(board[i])) {
    34. return true;
    35. }
    36. }
    37. // \向3连
    38. if (flag.equals("" + board[0].charAt(0) + board[1].charAt(1) +
    39. board[2].charAt(2))) {
    40. return true;
    41. }
    42. // /向3连
    43. if (flag.equals("" + board[0].charAt(2) + board[1].charAt(1) +
    44. board[2].charAt(0))) {
    45. return true;
    46. }
    47. return false;
    48. }