首页 > 解决方案 > 合并两个二维数组 (M + N)

问题描述

我是第一年的编程人员,试图解决大学给我们学生的这个挑战。

问题图片

截屏

它说(N + K)的地方有一个错字,而实际上它实际上是(M + K)列。

我对这个问题的尝试如下

public static int[][] mergeArrays(int[][] arrayA, int[][] arrayB){
    int rows = 3;
    int columns = arrayA[0].length + arrayB[0].length;      
    int[][] mergedArray = new int[rows][columns];
    int k = 0;
    for (int i = 0; i < rows; i++)
    {
        for ( int j = 0  ; j < columns; j++)
        {
            try
            {
                mergedArray[i][j] = arrayA[i][j];
            }
            catch (ArrayIndexOutOfBoundsException e)
            {
                mergedArray[i][j] = arrayB[i][k];
                k += 1;
            }
        }
    }
    return mergedArray;
}

public static void main(String [] args)
{
    int [][] a1 = { {1,2,3,3,3} , {3,2,1,6,3} , {4,5,6,1,3}  };
    int [][] a2 = { {1,9,7,2,3} , {0,7,8,3,2} , {3,8,9,7,2} };

    int[][] m = mergeArrays(a1,a2);
    for (int[] x : m)
    {
        for (int y : x)
        {
            System.out.print(y + " ");
        }
        System.out.println();
     }
}

该程序由于某种原因无法运行。我不知道我的方法有什么问题。如果有人帮助我,我将不胜感激。

标签: javaarrays

解决方案


您没有正确合并它。您的逻辑是,如果 arrayA 列索引超出范围,则您正在从 arrayB 的列中添加。但是,如果这也超出了范围,就像您的情况一样。因为你总是在增加它的索引 k。您可以简单地分别迭代 2 个数组并合并到结果数组中。

public static int[][] mergeArrays(int[][] arrayA, int[][] arrayB) {
        int rows = 3;
        int columns = arrayA[0].length + arrayB[0].length;
        int[][] mergedArray = new int[rows][columns];
        int k = 0;
        for (int i = 0; i < rows; i++) {
            for (int j = 0; j < arrayA[0].length; j++) {
                mergedArray[i][k++] = arrayA[i][j];
            }
            for (int j = 0; j < arrayB[0].length; j++) {
                mergedArray[i][k++] = arrayB[i][j];
            }
            k=0;
        }
        return mergedArray;
    }

推荐阅读