gpt4 book ai didi

java - Java 中的三维 boolean 数组

转载 作者:行者123 更新时间:2023-12-02 03:29:16 28 4
gpt4 key购买 nike

我有以下代码:

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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com