2014-11-01 37 views
3

我想用多维数组做一些事情。我是Java的新手,而不是一个优秀的程序员,在互联网上我找不到关于这个主题的其他东西,所以我想我会在这里问。创建一个具有未指定变量行长度的多维数组(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}}; 

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

任何帮助,将不胜感激!

+0

嘿,无关你的问题,但以后可能会帮助你。您可以使用'System.arraycopy()'创建一个具有计算出的高度和宽度的新矩阵。检查我编写的代码,以改变矩阵的大小:['MatrixUtils.java'](http://pastebin.com/sMMDfWfk) – 2014-11-01 21:16:55

+0

为什么不垂直遍历数组并找到最大值(水平大小),然后得到总和,有这个最大尺寸。合理? – mawia 2014-11-01 21:26:08

回答

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中的多维数组确实是一个数组的数组。 (这是不一定的事情应该是这样,但它是它是什么。)

(作为一个完整的一边,你应该抛出一个IllegalArgumentException当两个阵列不具有相同的尺寸,而不是回报空。您的代码将是一个更容易使用的方式。)

+0

非常感谢!我不知道你可以声明一个多维数组,其中阵列中的数组长度没有建立 - 这完全解决了这个问题。 我同意你的看法,返回null看起来很没用。然而,这是我正在学习Java课程的实验的一部分,我们还没有涉及异常处理,所以这是教授希望完成的方式。 我应该澄清一点,我不只是在寻找某人为我编写自己的代码。这些知识是非常有用的,可以让我做这个实验的其他部分,所以谢谢! – 2014-11-01 23:19:34

+0

@ChristianSilva那就解释一下吧。不要担心代码,你显然做了所有其他的事情,这是缺失拼图的唯一部分。 – biziclop 2014-11-02 15:38:20

相关问题