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

Posted

技术标签:

【中文标题】创建具有未指定可变行长度的多维数组(Java)【英文标题】:Creating a multidimensional array with unspecified variable row lengths (Java) 【发布时间】:2014-11-01 21:12:28 【问题描述】:

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

本质上,我正在制作一种方法,它将两个多维整数数组的值相加,以创建第三个多维数组。在多维数组是矩阵的情况下(例如,两个 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;

我遇到的问题是我不能在不指定维度的情况下声明“sum”MD 数组...有没有办法在 for 循环本身中创建 sum 数组?我觉得这将是最简单的解决方案(如果可能的话),否则我不知道还能尝试什么。

任何帮助将不胜感激!

【问题讨论】:

嘿,与您的问题无关,但稍后可能会为您提供帮助。您可以使用System.arraycopy() 创建具有计算出的高度和宽度的新矩阵。检查我编写的用于更改矩阵大小的代码:MatrixUtils.java 为什么不垂直遍历数组并找到max(horizo​​ntal-size)然后求和,有这个最大维度。有意义吗? 【参考方案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。这样您的代码会更容易使用。)

【讨论】:

非常感谢!我不知道您可以声明一个多维数组,其中数组中的数组长度未确定——这完全解决了这个问题。我同意你的观点,返回 null 似乎毫无用处。但是,这是我正在学习的 Java 课程实验室的一部分,我们还没有涉及异常处理,所以这就是教授想要的方式。我应该澄清一下,我不只是在找人为我编写自己的代码。这些知识真的很有用,可以让我做这个实验的其他部分,所以谢谢! @ChristianSilva 那就解释一下。不用担心代码,你显然做了其他所有事情,这是拼图中唯一缺少的部分。

以上是关于创建具有未指定可变行长度的多维数组(Java)的主要内容,如果未能解决你的问题,请参考以下文章

matlab如何创建多维数组

Java多维数组平均

数组集合

Java中如何获取多维数组的长度

JavaScript:自动对可变多维数组进行对角排序

Java中的多维数组长度