java - 连接四左移右移索引越界

标签 java arrays

我正在尝试使用我在网上找到的 ai 来实现 connect 4,并且我对其进行了一些修改。我正在尝试添加左移右移移动。 左移 - ABCDEFG -> GABCDEF 右移 - ABCDEFG -> BCDEFGA 我尝试将其添加到合法 Action 中

public boolean placeMove(int column, int player){         
    //if(!isLegalMove(column)) {System.out.println("Illegal move!"); return false;}
    if (column == 8){
        for (int x = 0; x < 6; x++) {
            for (int y = 0; y < 7; y--) {
                if(y == 0){
                    board[x][0] = board[x][6];
                }
                else board[x][y] = board[x][y--];
            }
        }
    }
    else if (column == 9){
        for (int x = 0; x < 6; x++) {
            for (int y = 0; y < 7; y++) {
                if(y == 5){
                    board[x][5] = board[x][0];
                }
                else board[x][y] = board[x][y++];
            }
        }
    }
    else {
        for(int i=5;i>=0;--i){
            if(board[i][column] == 0) {
                board[i][column] = (byte)player;
                return true;
            }
        }
    }
    return false;
}

但是,它返回 arrayindexoutofbounds 异常。有人能指出我哪里错了吗?谢谢

如果有帮助的话,这是董事会声明

byte[][] board = new byte[6][7];

public Board1(){
    board = new byte[][]{
        {0,0,0,0,0,0,0,},
        {0,0,0,0,0,0,0,},
        {0,0,0,0,0,0,0,},
        {0,0,0,0,0,0,0,},
        {0,0,0,0,0,0,0,},
        {0,0,0,0,0,0,0,},    
    };
} 

最佳答案

    for (int x = 0; x < 6; x++) {
        for (int y = 0; y < 7; y--) {
            if(y == 0){
                board[x][0] = board[x][6];
            }
            else board[x][y] = board[x][y--];
        }
    }

在第二个 for 循环中,y = 0,然后递减 y 并尝试在“else board[x][y] = board[x][y--]”中访问它,其中一次你再次减少它。第一次迭代后,y 将为 -1。这不是有效的索引。我会再次查看这个逻辑,如果必须的话,写出每个迭代并写出什么值是什么。

自始至终,您都在双重递增/递减 y 值。

关于java - 连接四左移右移索引越界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49160368/

相关文章:

java - 如何报告后台任务的进度?

php - 使用通配符搜索数组键

arrays - 在PowerShell中返回具有单个元素的数组

java - Netty NetworkInterface.getNetworkInterfaces() 被阻止

java - 如何从android中的assets文件夹中读取html内容

c - 添加数组元素的总和给出了错误的输出?

arrays - 如何在scala中迭代json数组

c - 如何使用 printf 从字符串数组中打印单个字符?

java - ClassLoader加载的两个类,不能互相调用

java - Android 单例线程安全