将2d阵列切割成所需部分

时间:2015-09-25 21:02:12

标签: java arrays

我有一个包含一些数字的数组,这是通过代码程序生成的,我想删除不必要的数组部分。

所以直到现在我都尽力创建自己的代码,但是效果并不好(这就是我在这里的原因)。

这是我的尝试:

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];作为异常的原因。

感谢每一位帮助。感谢。

1 个答案:

答案 0 :(得分:1)

自己调试应该非常简单。

看看你的循环:

for (int z = firstNeededZ; x <= lastNeededZ; z++)

这将永远循环(或直到你得到ArrayIndexOutOfBoundsException),因为你的停止条件包含一个拼写错误。

x <= lastNeededZ当然必须是z <= lastNeededZ