2012-06-10 29 views
2

我有一個使用「params」修飾符用於2維數組的C#方法。將帶有「params」修飾符的C#方法轉換爲Java

/// <summary> 
/// Combine vectors horizontally. 
/// </summary> 
/// 
public static T[] Concatenate<T>(params T[][] vectors) 
{ 
    int size = 0; 
    for (int i = 0; i < vectors.Length; i++) 
     size += vectors[i].Length; 

    T[] r = new T[size]; 

    int c = 0; 
    for (int i = 0; i < vectors.Length; i++) 
     for (int j = 0; j < vectors[i].Length; j++) 
      r[c++] = vectors[i][j]; 

    return r; 
} 

我把它轉換成Java這樣的:

{ 
    int size = 0; 
    for (int i = 0; i < vectors.length; i++) 
    { 
     size += vectors[i].; 
    } 

    T[] r =(T[]) Array.newInstance(vectors[0][0].getClass(), size); 

    int c = 0; 
    for (int i = 0; i < vectors.length; i++) 
    { 
     for (int j = 0; j < vectors[i].length; j++) 
     { 
       r[c++] = vectors[i][j]; 
     } 
    } 

    return r; 
} 

但它似乎是錯誤的。解決方案不起作用。 請有人告訴我正確的方法。 非常感謝。

+2

你在你的java代碼中有第4行的語法錯誤。此外,它不完善,方法聲明在哪裏? 「不起作用」是什麼意思?你期望發生什麼,會發生什麼? – Polygnome

+0

如果向量的大小爲0,向量[0]的大小爲0,則Java代碼將不起作用。 –

+0

[堆棧溢出不是代碼翻譯服務](http://meta.stackexchange.com/a/129362)。請用簡單的英文解釋要求,而不要用其他編程語言的代碼解釋。 – dtb

回答

2

在Java中使用...而不是params,如解釋here

所以你申報你的方法是這樣的(注意的一個[]的損失):

public static T[] Concatenate<T>(T[]...vectors) 
0

一對夫婦的建議:

  • 只是避免使用數組和泛型。由於類型earasure,他們不會一起玩。 (您在CLR上沒有這個問題。)

  • 傾向於現有的解決方案。番石榴的Iterables.concat似乎符合這裏的法案。