Java中的三维布尔数组

Java中的三维布尔数组,java,arrays,multidimensional-array,Java,Arrays,Multidimensional Array,我有以下代码: public class Map { private Random rand = new Random(); private int x, y, z; private boolean[][][] blocks; /** * Creates a map object. Map objects include a 3 dimensional * boolean array. Declared through <code>

我有以下代码:

public class Map {
    private Random rand = new Random();
    private int x, y, z;
    private boolean[][][] blocks;
    /**
     * Creates a map object. Map objects include a 3 dimensional 
     * boolean array. Declared through <code>new boolean[z][y][x]</code>.
     * @param x
     * @param y
     * @param z 
     */
    public Map(int x, int y, int z) {
        this.x = x;
        this.y = y;
        this.z = z;
        this.blocks = new boolean[this.z][this.y][this.x];
        for (boolean[][] i : this.blocks) {
            for (boolean[] j : i) {
                for(int k = 0; k < j.length; k++) {
                    j[k] = (rand.nextInt(1) == 1);
                }
            }
            System.out.println(Arrays.toString(this.blocks));
        }
    }
    /**
     * Returns the map array.
     * @return 
     */
    public String getMap() {
        return Arrays.toString(blocks);
    }
}
我想创建一个随机真/假值的三维布尔数组。然而,每当我调用
newmap(10,10,10)
时,我都会得到一个“java.lang.NullPointerException”,这意味着数组要么充满了null值,要么本身就是null

我想知道的是如何创建这个数组,这样我就不会得到这个异常(或任何其他异常)

编辑:我修复了为
rand
设置值的错误,但是循环仍然没有用布尔值填充数组。我明白了:

[[[Z@6d06d69c, [[Z@7852e922, [[Z@4e25154f, [[Z@70dea4e, [[Z@5c647e05, [[Z@33909752, [[Z@55f96302, [[Z@3d4eac69, [[Z@42a57993, [[Z@75b84c92]

这是因为您的阵列不是真正的三维阵列,而是一个三维阵列。那你的台词呢

this.blocks = new boolean[this.z][this.y][this.x];
创建布尔值[][]的z实例数组,所有这些实例都为空。因此,我们需要明确地创建它们:

    this.blocks = new boolean[z][y][x];
    for (int i = 0; i < z; i++) {
        this.blocks[i] = new boolean[y][x];
        for (int j = 0; j < y; j++) {
            this.blocks[i][j] = new boolean[x];
            for(int k = 0; k < x; k++) {
                this.blocks[i][j][k] = (rand.nextInt(1) == 1);
            }
        }
    }
    System.out.println(Arrays.toString(this.blocks));
this.blocks=new boolean[z][y][x];
对于(int i=0;i
这是因为您的阵列不是真正的3D阵列,而是一个3D阵列。那你的台词呢

this.blocks = new boolean[this.z][this.y][this.x];
创建布尔值[][]的z实例数组,所有这些实例都为空。因此,我们需要明确地创建它们:

    this.blocks = new boolean[z][y][x];
    for (int i = 0; i < z; i++) {
        this.blocks[i] = new boolean[y][x];
        for (int j = 0; j < y; j++) {
            this.blocks[i][j] = new boolean[x];
            for(int k = 0; k < x; k++) {
                this.blocks[i][j][k] = (rand.nextInt(1) == 1);
            }
        }
    }
    System.out.println(Arrays.toString(this.blocks));
this.blocks=new boolean[z][y][x];
对于(int i=0;i
在哪里实例化
rand
?在哪里实例化
rand
?我尝试了这个,但仍然得到了这个:
[[[Z@6d06d69c, [[Z@7852e922, [[Z@4e25154f, [[Z@70dea4e, [[Z@5c647e05, [[Z@33909752, [[Z@55f96302, [[Z@3d4eac69, [[Z@42a57993, [[Z@75b84c92]
我不认为Arrays.ToString可以处理多维数组。请尝试以另一种方式调试/打印它(抱歉,不再使用Java)。你是对的。Arrays.ToString不处理多维数组,但是,我可以处理Arrays.DeepToString()。我尝试了这个方法,但仍然得到以下结果:
[[[Z@6d06d69c, [[Z@7852e922, [[Z@4e25154f, [[Z@70dea4e, [[Z@5c647e05, [[Z@33909752, [[Z@55f96302, [[Z@3d4eac69, [[Z@42a57993, [[Z@75b84c92]
我认为Arrays.ToString无法处理多维数组。请尝试用另一种方式调试/打印它(抱歉,不再使用Java).Arrays.ToString不做多维数组,但是我可以做Arrays.DeepToString()。