【问题标题】:How to simplify tic tac toe winner checking如何简化井字游戏获胜者检查
【发布时间】:2017-10-12 17:09:27
【问题描述】:

我正在用 Java 编写井字游戏,我不确定是否有更快/更简单的方法来检查获胜者。

if ( boardArray[0][0] == boardArray[0][1] && boardArray[0][0] == boardArray[0][2]) {
        System.out.println("The wimmer is: " + boardArray[0][0]);
    } else if ( boardArray[1][0] == boardArray[1][1] && boardArray[1][0] == boardArray[1][2]) {
        System.out.println("The wimmer is: " + boardArray[1][0]);
    } else if ( boardArray[2][0] == boardArray[2][1] && boardArray[2][0] == boardArray[2][2]) {
        System.out.println("The wimmer is: " + boardArray[2][0]);
    } else if ( boardArray[0][0] == boardArray[1][0] && boardArray[0][0] == boardArray[2][0]) {
        System.out.println("The wimmer is: " + boardArray[0][0]);
    }else if ( boardArray[0][1] == boardArray[1][1] && boardArray[0][1] == boardArray[2][1]) {
        System.out.println("The wimmer is: " + boardArray[0][1]);
    } else if ( boardArray[0][2] == boardArray[1][2] && boardArray[0][2] == boardArray[2][2]) {
        System.out.println("The wimmer is: " + boardArray[0][2]);
    } else if ( boardArray[0][0] == boardArray[1][1] && boardArray[0][0] == boardArray[2][2]) {
        System.out.println("The wimmer is: " + boardArray[0][0]);
    } else if ( boardArray[0][2] == boardArray[1][1] && boardArray[0][2] == boardArray[2][0]) {
        System.out.println("The wimmer is: " + boardArray[1][1]);
    } else {
        System.out.println("ITS A DRAW");
    }

我知道我可以使用 for 循环来循环遍历不同的索引,但这只会将代码行数减少约 2/3,因此不会产生太大的影响

【问题讨论】:

  • “减少 2/3” 很多,我们是否值得。应该使用循环的主要好处和原因是 DRY:不要重复自己。您实际上举了一个很好的例子:您有一个错字:“wiMMer 是:”。现在您必须更改 8 行而不是仅更改 1 行。简化代码将使更改内容变得更加容易,无论是纠正错误还是更改某些行为。
  • ^ 这应该是公认的答案。
  • @Sentry 你是对的,我已经更改了我的代码

标签: java arrays for-loop


【解决方案1】:

我知道我可以使用 for 循环来循环遍历不同的索引,但这只会将代码行数减少约 2/3,因此不会产生太大的影响。

您可以继续使用循环来改进您的代码,因为它不仅可以减少代码行数,还可以为您带来很多好处。它可以改善您的:

  • 可维护性

    要编辑代码,您只需编辑一次而不是编辑 n 次,其中 n 是它应该经历的迭代次数。

  • 可扩展性

    这可能不是一个很好的例子,但假设您想将电路板更改为 4 x 4。使用循环,您可能只需要更新电路板尺寸。所有其他代码几乎可以保持不变。

  • 可读性

    一个代码实例将比多个重复行更易于阅读。

  • 减少拼写错误的机会

    代码越少,印刷错误的可能性就越小。

  • 让调试更容易

    由于提高了可读性,错误查找和调试实际上会更容易。

【讨论】:

    【解决方案2】:

    前 6 部分不必执行 if else 语句。你可以使用循环。它将使您的代码紧凑。

    public static void check(int[][] boardArray) {
        for (int i = 0; i < 3; i++) {
            if (boardArray[i][0] == boardArray[i][1] && boardArray[i][0] == boardArray[i][2]) {
                System.out.println("The winner is: " + boardArray[i][0]);
                return;
            } else if (boardArray[0][i] == boardArray[1][i] && boardArray[0][i] == boardArray[2][i]) {
                System.out.printf("The winner is: " + boardArray[0][i]);
                return;
            }
        }
    
        if (boardArray[0][0] == boardArray[1][1] && boardArray[0][0] == boardArray[2][2]) {
            System.out.println("The winner is: " + boardArray[0][0]);
        } else if (boardArray[0][2] == boardArray[1][1] && boardArray[0][2] == boardArray[2][0]) {
            System.out.println("The winner is: " + boardArray[1][1]);
        } else {
            System.out.println("ITS A DRAW");
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多