Java 在3d数组中迭代?

Java 在3d数组中迭代?,java,arrays,netbeans,Java,Arrays,Netbeans,我正在编写一个数独解算器,我的老师建议我使用3d数组,因为我从未使用过3d数组;我很难弄清楚如何创建循环来遍历行和列。你打算怎么做 编辑:我找到了每第三列/行迭代一次的方法,希望我最终能够完成其他六列/行,但我的方向正确吗 int[][][] = board[9][3][3]; public boolean columnCheck(int[][][] board) { boolean filled = false; for(int i = 0; i < board.le

我正在编写一个数独解算器,我的老师建议我使用3d数组,因为我从未使用过3d数组;我很难弄清楚如何创建循环来遍历行和列。你打算怎么做

编辑:我找到了每第三列/行迭代一次的方法,希望我最终能够完成其他六列/行,但我的方向正确吗

 int[][][] = board[9][3][3];

public boolean columnCheck(int[][][] board)
{
    boolean filled = false;
    for(int i = 0; i < board.length; i++)
    {
        for(int j = 0; j < board[0].length; j++)
        {
            System.out.println(board[i][j][0]);                
        }

    }
    return true;
}

public boolean rowCheck(int[][][] board)
{
     boolean filled = false;
    for(int i = 0; i < board.length; i++)
    {
        for(int j = 0; j < board[0].length; j++)
        {
            System.out.println(board[i][0][j]);
        }

    }
    return true;
可以使用3 for循环在3D数组中进行迭代,例如:

public static void main(String[] args) throws FileNotFoundException {
    int[][][] array = new int[9][3][3];
    for(int i=0 ; i<array.length ; i++){
        for(int j=0 ; j<array[i].length ; j++){
            for(int k=0 ; k<array[i][j].length ; k++){
                System.out.println("[" + i + "][" + j + "][" + k + "]:" + array[i][j][k]);
            }
        }
    }
}

不过,对于数独游戏,您不需要3D阵列。2D数组就足够了。

我想您的3d数组表示数独,如下所示:
public class Main {

    public static void main(String[] args) {
        int[][][] board = new int[3][3][9];
        // Assume that first parameter is row
        // The second is column

        // Iterating through first row (board[0])
        for (int i = 0; i < 3; i++) {
            // i is col number
            for (int j = 0; j < 9; j++) {
                //j is block number
                System.out.println(board[0][i][j]);
            }
        }

        // Iterating through second column
        for (int i = 0; i < 3; i++) {
            // i is row number
            for (int j = 0; j < 9; j++) {
                // j is block number
                System.out.println(board[i][1][j]);
            }
        }
    }
}
“9”代表9个小3x3区块。第一个“3”表示块的每一行,第二个“3”表示块的每一列

这将产生以下结果:

array[0][x][y]  |  array[1][x][y]  |  array[2][x][y] 
----------------------------------------------------
array[3][x][y]  |  array[4][x][y]  |  array[5][x][y]
----------------------------------------------------
array[6][x][y]  |  array[7][x][y]  |  array[8][x][y]
// The first three rows
// You can probably figure out yourself how to do the last 6, 
// and how to combine those 3 seperate sections
for (int i=0; i<3; i++) {
    for (int j=0; j<3; j++) {
        for (int k=0; j<3; k++) {
            System.out.println(array[j][i][k]);
        }
    }
}

// The first three columns 
for (int i=0; i<3; i++) {
    for (int j=0; j<7; j+=3) {
        for (int k=0; k<3; k++) {
            System.out.println(array[j][k][i]);
        }
    }
}
要迭代每一行,可以执行以下操作:

array[0][x][y]  |  array[1][x][y]  |  array[2][x][y] 
----------------------------------------------------
array[3][x][y]  |  array[4][x][y]  |  array[5][x][y]
----------------------------------------------------
array[6][x][y]  |  array[7][x][y]  |  array[8][x][y]
// The first three rows
// You can probably figure out yourself how to do the last 6, 
// and how to combine those 3 seperate sections
for (int i=0; i<3; i++) {
    for (int j=0; j<3; j++) {
        for (int k=0; j<3; k++) {
            System.out.println(array[j][i][k]);
        }
    }
}

// The first three columns 
for (int i=0; i<3; i++) {
    for (int j=0; j<7; j+=3) {
        for (int k=0; k<3; k++) {
            System.out.println(array[j][k][i]);
        }
    }
}

我希望这能让你继续前进,而不是为你解决所有问题。

提示:board.length将为你提供9。。。如果使用board[0],则会得到int[]。如果您知道如何处理2D数组,那么您应该很好…它可以工作,但我发现这样的代码不太可读。为什么是3D阵列?哪个是宽度,哪个是高度,第二个是什么?等等我会把它包装在一些自我评论的抽象层中。但是,这是对在3D数组上迭代问题的正确答案。