2012-08-29 30 views
4

由於人們回答問題留在這裏,我的問題是我使用的API版本與我的文檔不同步......您實際上可以這樣做。帶有二維數組的Java可變參數

是否有任何方法可以在Java中使用2-d數組作爲參數,該參數需要數組的可變參數?

我試圖調用的函數是

public Long sadd(final byte[] key, final byte[]... members) { 

,我有個字節的2-d陣列(字節[] []數據=等等)

但是如果我嘗試調用

sadd(key,data); 

我得到以下編譯器錯誤:

(實際參數字節[] []不能被轉換到b yte []通過方法調用轉換)

是否有任何方式使用二維數組作爲數組類型的變量?

+0

@ user846476數組大小通常在運行時指定:'char [] chars = new char [string.length()]' – slim

回答

2

你可以提供更多的代碼,因爲這是爲我編譯的。

byte[][] data = new byte[1][]; 
byte[] key = new byte[1]; 

long sadd = sadd(key, data); 
+0

這是一個1乘1思想的2D數組。 OP希望第二個維度可變我認爲 – RNJ

+1

@ user846476 - 這應該沒有什麼區別。如果你不相信我們,那就試試看看吧。 –

+1

@ user846476沒關係。 ;) –

0

因爲編譯器沒有辦法來推斷兩個維度這是不可能的。使用一維數組時,您可以將數組的長度確定爲輔助參數(非強制參數)的數量。

例如:假設您的方法定義包括n強制性參數,並且在運行時您提供了更多參數m。那些m參數將組成輔助參數的數組。長度爲m。在二維數組的情況下,編譯器必須爲數組提供兩個維度,例如:dimension1 * dimension2 = m

+1

這不是不可能的 - 請參閱我們的其他答案。 – slim

6

以下適用於我。也許你沒有做你認爲你在做什麼?

@Test 
public void test_varargs() { 
    byte[] x = new byte[] { 1, 2, 3}; 
    byte[] y = new byte[] { 0, 1, 2}; 
    assertEquals(9L, sum(x,y)); 
    byte[][] z = new byte[][] { x,y }; 
    assertEquals(9L, sum(z)); 
} 

public long sum(final byte[]... members) { 
    long sum = 0; 
    for (byte[] member : members) { 
     for (byte x : member) { 
     sum += x; 
     } 
    } 
    return sum; 
} 
1
class A { 
    void show(int[] ax,int[]...arr) { 
     for (int is : ax) { 
      System.out.println(is); 
     } 
     for (int[] a : arr) { 
      for (int i : a) { 
       System.out.println(i); 
      } 
     } 
    } 
} 
public class abc{ 
    public static void main(String[] args) { 
     A a = new A(); 
     int[] arr1= new int[]{10,20}; 
     int[][] arr2 = new int[][] { { 10, 20 }, { 20, 20 }, { 30, 20 } }; 
     a.show(arr1,arr2); 
    } 
} 

在這裏,我已經使用2-d數組作爲VAR args參數和一個1-d數組作爲固定參數。請參閱此代碼,如果這可以幫助你! :)