我有一个包含一些数字的数组,这是通过代码程序生成的,我想删除不必要的数组部分。
所以直到现在我都尽力创建自己的代码,但是效果并不好(这就是我在这里的原因)。
这是我的尝试:
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];
作为异常的原因。
感谢每一位帮助。感谢。
答案 0 :(得分:1)
自己调试应该非常简单。
看看你的循环:
for (int z = firstNeededZ; x <= lastNeededZ; z++)
这将永远循环(或直到你得到ArrayIndexOutOfBoundsException
),因为你的停止条件包含一个拼写错误。
x <= lastNeededZ
当然必须是z <= lastNeededZ
。