Java 如何获得线阵的坐标

Java 如何获得线阵的坐标,java,arrays,Java,Arrays,我正在制作一个游戏,其中我将3d地图存储在一个整数数组中: int width = 256; int height = 256; int depth = 64; int[] map = new int[width * height * depth]; 我需要得到索引的x,y,z。我目前提出的方法是: private int getX(int blockID) { return blockID % width; } private int getY(int blockID) {

我正在制作一个游戏,其中我将3d地图存储在一个整数数组中:

int width = 256;
int height = 256;
int depth = 64;
int[] map = new int[width * height * depth];
我需要得到索引的x,y,z。我目前提出的方法是:

private int getX(int blockID) {
    return blockID % width;
}

private int getY(int blockID) {
    return (blockID % depth) / height;
}

private int getDepth(int blockID) {
    return blockID / (width * height);
}
获取x和深度的方法似乎可行,但我无法让getY()正常工作,我一直在获取和排列索引OutofBoundsException,如下所示:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
at game.Level.updateLighting(Level.java:98)
at game.Level.generateMap(Level.java:58)
at game.Level.<init>(Level.java:21)
at game.mainClass.main(Minecraft.java:6)
线程“main”java.lang.ArrayIndexOutOfBoundsException中的异常:-1 在game.Level.updateLighting(Level.java:98) 在game.Level.generateMap(Level.java:58) 在game.Level.(Level.java:21) 在game.mainClass.main(Minecraft.java:6)
如果你知道怎么做,请帮忙。

伙计。只需使用3D阵列

int[][][] map = new int[width][height][depth];

这样您就不必担心从
块id
中解组
x
y
z
索引。他们是直系独立的,所以保持这种状态。

伙计。只需使用3D阵列

int[][][] map = new int[width][height][depth];
这样您就不必担心从
块id
中解组
x
y
z
索引。它们是线性独立的,所以请保持这种状态。

试试看

private int getY(int blockID) {
    return (blockID / width) % height
}
试一试


@斯塔斯想详细说明一下吗?在什么方面,具有
w*h*d
元素的1D阵列比同等的3D阵列“更高效”?stas想详细说明一下吗?在什么方面,具有
w*h*d
元素的一维阵列比等效的三维阵列“更高效”?