连续检查 4 个数组

问题描述 投票:0回答:2

我有一个数组,我想连续检查 4 个数组(游戏)。我可以用数百个 if else 来完成它,但我怎样才能在循环中完成它呢?这可能吗? 这是我的代码。预先感谢!

int array[][] = {{0, 1, 1, 1, 1, 0, 0},
                 {0, 0, 0, 1, 0, 1, 1},
                 {0, 0, 0, 1, 0, 1, 1},
                 {0, 1, 1, 0, 1, 0, 1},
                 {1, 0, 0, 1, 0, 1, 1},
                 {1, 0, 0, 1, 0, 1, 0}};

for (int rows = 0; rows < 6; rows++) {
    for(int columns = 0; columns < 7; columns++) {
        System.out.print(array[rows][columns] + " ");
    }
    System.out.println();
}

if (array[0][0] == 0) {
    if(array[0][1] == 0) {
        if (array[0][2] == 0) {
            if (array[0][3] == 0) {
                System.out.println("Connect Four!");
            }
        }
    }
}
java arrays loops
2个回答
4
投票

有这样的事吗?

int[] dx = {0, 1, 0, -1}; // I think you only need the first two, because
int[] dy = {1, 0, -1, 0}; // otherwise you check things twice

for (int y = 0; y < array.length; y++) {
    for (int x = 0; x < array[y].length; x++) {
        int start_value = array[y][x];
        for (int i = 0; i < dx.length; i++) {
            for (int j = 1; j < 4; j++) {
                // check if there are enough cells in y direction
                if (y + dy[i] * j >= array.length) break;
                // check if there are enough cells in x direction
                if (x + dx[i] * j >= array[y].length) break;
                // check if the value is the same
                if (array[y + dy[i] * j][x + dx[i] * j] != start_value) {
                    break;
                }
                // the next three elements in a direction are the same
                if (j == 3) {
                    System.out.println("4 in a row");
                    return;
                }
            }
        }
    }
}
System.out.println("not 4 in a row");

如果您想检查更多方向(例如对角线),请向

dx
dy
添加更多值。


0
投票

我会引入一个计数器,每当当前“行”中出现 0 时,它就会增加它,如果当前数字是 1,则重置它。如果计数器达到 4,则有 4 个已连接。

看看这个:

int array[][] = {{0, 1, 1, 1, 1, 0, 0},
                 {0, 0, 0, 1, 0, 1, 1},
                 {0, 0, 0, 1, 0, 1, 1},
                 {0, 1, 1, 0, 1, 0, 1},
                 {1, 0, 0, 1, 0, 1, 1},
                 {1, 0, 0, 1, 0, 1, 0}};

//Search rows
for (int i = 0; i < array.length; i++) {
    int rowCount = 0;                   
    for (int j = 0; j < array[i].length; j++) {
        if (array[i][j] == 0) {
            rowCount++;
        } else {
            rowCount = 0;
        }
        if (rowCount == 4) {
            System.out.println("yay");
        }
    }
}

这不是完整的代码,仅适用于行。但它应该能让您了解如何解决行甚至对角线的问题。

© www.soinside.com 2019 - 2024. All rights reserved.