在Java中将二维数组转换为一维数组

时间:2020-03-10 00:37:44

标签: java arrays

我正在尝试将Java中的二维数组转换为一维数组。 我不能使用任何其他数据结构,ArrayList,集合等进行临时存储。 只能分配一个数组-该数组将从方法中返回。

在方法中输入了三个数组,以验证程序。测试1具有2行3列和2列的2D数组,测试2具有3行1列的2D数组,并且测试3具有空列。

我当前的代码是:

public static int[] twoDConvert(int[][] nums) {
    int index = 0;
    int[] combined = new int[nums.length*3];
    if (nums.length == 0) return combined;  
        for (int row = 0; row < nums.length; row++) {
            for (int col = 0; col < nums.length; col++) {
                combined[index] += nums[row][col];
                index++;
        }
    }
    return combined;
}

第一个测试正常工作,但是由于某种原因,第二个测试抛出ArrayIndexOutOfBoundsException(索引1超出长度1的范围)。 无论组合数组的长度有多大,这种情况都会发生。 我该如何解决?

1 个答案:

答案 0 :(得分:2)

我们创建一个单个的整数数组,其长度由size方法确定。 Size采用二维数组,并找到每一行中所有列的总和,然后返回该总和。我们检查长度是否为0,如果是,则返回。然后,我们遍历所有行,然后遍历该行中的所有列。然后,我们将该行和列中的值分配给数组中的下一个索引。不幸的是,据我所知,我们无法进行任何数学运算来确定基于行/列的索引,因为它们可能是可变大小的。

    public static int[] twoDConvert(int[][] nums) {
        int[] combined = new int[size(nums)];

        if (combined.length <= 0) {
            return combined;
        }
        int index = 0;

        for (int row = 0; row < nums.length; row++) {
            for (int column = 0; column < nums[row].length; column++) {
                combined[index++] = nums[row][column];
            }
        }
        return combined;
    }

    private static int size(int[][] values) {
        int size = 0;

        for (int index = 0; index < values.length; index++) {
            size += values[index].length;
        }
        return size;
    }