创建具有未指定的变量行长度的多维数组(Java)

时间:2014-11-01 21:12:29

标签: java arrays multidimensional-array

我试图用多维数组做一些事情。我是Java新手而不是优秀的程序员,我在互联网上找不到关于这个话题的任何其他内容,所以我想我会问这里。

本质上,我正在制作一个方法,将两个多维整数数组的值相加,以创建第三个多维数组。这与多维数组ARE矩阵(例如,两个2x3数组加在一起)的情况下的矩阵加法相同,但如果我有一个具有可变行长度的多维数组则不是这样。到目前为止,我的方法是:

public static int[][] addMDArray(int[][] a, int[][] b)
{
    boolean columnequals = true;
    for (int row = 0; row < a.length; row++)
    {
        if (a[row].length != b[row].length)
        {
            columnequals = false;
        }
    }
    if (columnequals == false || a.length != b.length)
        System.out.println("The arrays must have the same dimensions!");
    else
    {
        int[][] sum = new int[a.length][a[0].length];
        for (int row = 0; row < a.length; row++)
        {
            for (int column = 0; column < a[row].length; column++)  
                sum[row][column] = a[row][column] + b[row][column];
        }
        return sum;
    }
    return null;
}

正如我所说,这适用于没有可变行长度的MD阵列;但是,除了检查它们具有相同尺寸的第一部分之外,此方法不适用于这样的两个数组:

int[][] g = {{2, 1}, {3, 5, 4}, {5, 7, 7}};
int[][] d = {{1, 2}, {3, 4, 5}, {5, 6, 7}};

我遇到的问题是我无法宣布&#34;总和&#34;没有指定尺寸的MD数组...有没有办法在for循环中创建sum数组?我觉得这是最简单的解决方案(如果可能的话),但除此之外我不知道还有什么可以尝试。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

您可以:int[][] sum = new int[a.length][];完全合法。然后你可以sum[i] = new int[a[i].length];,你的代码将如下所示:

    int[][] sum = new int[a.length][];
    for (int row = 0; row < a.length; row++)
    {
        sum[row] = new int[a[row].length];
        for (int column = 0; column < a[row].length; column++)  
            sum[row][column] = a[row][column] + b[row][column];
    }

请记住,Java中的多维数组实际上是一个数组数组。 (这不一定是事情应该如何,但事实就是如此。)

(完全不用,当两个数组没有相同的维度而不是返回null时,你应该扔IllegalArgumentException。你的代码将更容易使用。)