2013-10-10 61 views
0

我想寫一個通用方法printAll它打印一個整數或字符的數組。 下面的代碼:在java中打印數組的通用方法

public static void main(String[] args) { 
    char cArray[] = {'a','b','c','d'}; 
    int iArray[] = {1,2,3,4}; 
    printAll(iArray); // Error at this line--refer below the code 

} 

public static <T> void printAll(T[] t){ 
    for(T x:t) { 
     System.out.println(x); 
    } 

}

錯誤:異常在線程 「主」 了java.lang.RuntimeException:不可編譯的源代碼 - 錯誤的樹類型:< .ANY>

+0

使用[Arrays.toString()](http://docs.oracle.com/javase/7/docs/api/java/ util/Arrays.html#toString(java.lang.Object [])) – vandale

+0

順便說一下,那個'T'沒有什麼用處。你可以聲明方法'public static void printAll(Object [] t)',它的工作原理完全相同。 – newacct

回答

6

printAll(T[] t)不會接受原始類型數組。您需要傳遞相應包裝類型的數組:

Character cArray[] = {'a','b','c','d'}; 
Integer iArray[] = {1,2,3,4}; 

但是,您不需要構建自己的方法。只需使用已存在的 - Arrays.toString()方法,該方法針對不同類型的基元數組以及Object[]數組進行重載。

7

請勿重新發明輪子,請使用Arrays.toStringArrays.deepToString。前者已經被重載以支持原語的數組(如第一個鏈接中指出的那樣,後者接收char[]),後者僅適用於類引用對象的數組。

1

您不能使用基本類型與泛型。使用Integer(或相應的參考型)

​​

你總是可以重載printAll方法對每個原語類型。

1

我不相信人們會爲他們工作,更多的是通知和教導如何做。

在java中打印數組的一種簡單易用的方法是將數組轉換爲字符串然後打印。這最適合數組列表。然後這可以被操縱以更好的格式打印。

例如使一個數組列表並添加一些值:

ArrayList<String> Array = new ArrayList<String>(); 
Array.add(1) 
Array.add(2) 
Array.add(3) 
Array.add(4) 
Array.add(5) 

然後從這裏這可以通過將其改變爲字符串被打印:

String str = Array.toString() 
System.out.println(str); 

這將打印以下:

[1,2,3,4,5] 

然後,您可以在打印之前通過在字符串上使用replaceALL來更改此格式T:

String str = Array.toString().replaceAll("[\\[\\]]","") 

現在,這將給:

1,2,3,4,5 

這幾乎是它,從這裏您可以添加額外的東西像System.lineSeparator,你會用它來代替thhe「」用新隊。

String str = Array.toString().replaceAll("[\\[\\]]","").replaceAll(",",System.lineSeparator()); 

這將使得它打印出來,如:

1 
2 
3 
4 
5