2014-11-01 86 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

相關問題