-2
我有一个数组,其中包含一些数字,它们通过代码以程序方式生成,我想删除不必要的数组部分。将一个二维数组向下划分为需要的部分
因此,直到现在我尽我所能创建我自己的代码,但它不工作得很好(这就是为什么我在这里)。
这是我尝试:
private void cutPlacementMap() {
int firstNeededX = Integer.MAX_VALUE;
int firstNeededZ = Integer.MAX_VALUE;
int lastNeededX = -1;
int lastNeededZ = -1;
for (int x = 0; x < placementMap.length; x++) {
for (int z = 0; z < placementMap[0].length; z++) {
if (placementMap[x][z] != 0) {
if (x < firstNeededX)
firstNeededX = x;
if (z < firstNeededZ)
firstNeededZ = z;
if (x > lastNeededX)
lastNeededX = x;
if (z > lastNeededZ)
lastNeededZ = z;
}
}
}
int lengthX = lastNeededX - firstNeededX;
int lengthZ = lastNeededZ - firstNeededZ;
int[][] newPlacementMap = new int[lengthX + 1][lengthZ + 1];
System.out.println("lengthX: " + lengthX);
System.out.println("lengthZ: " + lengthZ);
int conX = 0;
int conZ = 0;
for (int x = firstNeededX; x <= lastNeededX; x++) {
for (int z = firstNeededZ; x <= lastNeededZ; z++) {
newPlacementMap[conX][conZ] = placementMap[x][z];
conZ++;
}
conZ = 0;
conX++;
}
placementMap = newPlacementMap;
}
此代码引发ArrayIndexOutOfBoundException。这是指出newPlacementMap[conX][conZ] = placementMap[x][z];
作为例外的原因。
每一个帮助表示赞赏。谢谢。
好抓!他的'newPlacementMap'变量是否应该改变它们的边界,还是它们是原样的? –
@ShotgunNinja我认为他们确实是不正确的。 +1不是必需的。但是让它们过大不会导致异常。此外,检查这些东西的最简单方法是启动调试器;-) – Robin
实际上,回顾一下,我认为它们是故意制作的,因为(例如)如果只需要X方向上的一个元素,然后'firstNeededX == lastNeededX',所以'lengthX == 0',否则在需要1xZ容器时会导致0xZ容器。问题的症结在于,声明时应该添加+1,否则打印的值与容器的真实大小不匹配。 –