【问题标题】:Exception being thrown for connect 4 algorithm连接 4 算法抛出异常
【发布时间】:2016-11-25 18:48:01
【问题描述】:

所以我在检查是否有垂直连接 4 的代码时一直遇到问题。我的代码前言:棋盘有 6 行 7 列,变量 player1 保存用作筹码的角色的值,而 playerID 仅保存获得连接 4 的人的值。

public int verticalWin() {
    int playerID = 0;

    for (int x = 0; x < board[x].length; x++) {
        int count = 1;
        for (int y = board.length-2; y >= 0; y--) {
            if (board[y][x] == board[y+1][x]) {
                count++;
                if (count == 4) {
                    if (board[y][x] == player1) {
                        playerID = 1;
                    } else {
                        playerID = 2;
                    }
                }
            } else {
                count = 1;
            }
        }
    }
    return playerID;
}

我一直遇到的问题是 java.lang.ArrayIndexOutOfBoundsException: 6 不断发生异常,我认为它在第一行,但我似乎找不到问题。

【问题讨论】:

  • 我认为它在第一行:堆栈跟踪会准确地告诉您是哪一行引发了该异常。不要猜测。阅读堆栈跟踪。然后使用你的调试器一步一步地遍历代码,并观察变量的值。
  • 嗯,根据堆栈跟踪它是第一行,但我说我认为是因为我找不到错误。
  • 问题是 x

标签: java algorithm loops methods


【解决方案1】:

一些更简洁的代码

boolean isWinnerOnColumn(int playerID, int column) {
    int count = 0;

    for (int row = 0; row < 6; row++) {
        count = (board[row][column] == playerID) ? (count + 1) : 0;
        if (count == 4){
            return true;
        }
    }
    return false;
}

public int verticalWin() {
     for (int column = 0; column < 7; column++) {

         if (isWinnerOnColumn(1, column) {
            return 1;
         }

         if (isWinnerOnColumn(2, column) {
            return 2;
         }
     }
     return 0; // no winner
}

【讨论】:

    猜你喜欢
    • 2011-06-04
    • 2019-09-30
    • 2015-09-21
    • 2020-04-27
    • 2010-11-20
    • 1970-01-01
    • 1970-01-01
    • 2017-11-29
    • 2014-01-05
    相关资源
    最近更新 更多