java - Java 中的三维 boolean 数组

标签 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>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);
    }
}

我想创建一个随机真/假值的三维 boolean 数组。但是,每当我调用 new Map(10, 10, 10) 时,我都会收到“java.lang.NullPointerException”,这意味着该数组要么充满了 null 值,要么本身就是 null。

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

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

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

最佳答案

那是因为你的数组并不是真正的 3D,它是一个 array of array of arrays 。所以你的路线

this.blocks = new boolean[this.z][this.y][this.x];

创建 boolean[][] 的 z 实例数组,所有实例均为 null。所以我们需要明确地创建它们:

    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));

关于java - Java 中的三维 boolean 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38315514/

相关文章:

javascript - Javascript:在数组中搜索字符串,然后计算出现次数

java - 连接 4 检查获胜算法

java - 在 Java 中,如何使用模式和匹配器将大字符串拆分为特定的子字符串?

java - 如何使用 JavaFX 播放声音

java - 使用 1.9.30 GAE 时出现 Jetty IllegalArgumentException

arrays - PostgreSQL 中是否有可用的多值字段类型?

c# - 在 C# 中高效查找二维数组 T[][] 中的唯一元素

c# - 在多维数组中查找项目的索引

c - 用 C 语言设置二维数组

java - 如何干净地关闭嵌入式 ActiveMQ Artemis