2013-03-02 58 views
0

import java.util。*;從方法返回一個數組(似乎沒有工作)

公共類測試2 {

public static void main(String[] args){ 
int[] list = {1,2,3,4,5,6,7}; 
int[] list2 = reverse(list); 
System.out.print(list2); 
} 

public static int[] reverse(int[] list){ 
    int[] result = new int[list.length]; 

    for(int i=0, j=list.length-1; i<list.length; i++,j--){ 
     result[j] = list[i];} 

    return result; } 

} 

它是從我的教科書代碼。 但是,當我打印list2時,它顯示了這個奇怪的消息:[I @ 7b963273 我不知道代碼有什麼問題。 Plz幫助我!

回答

1

基元類型數組本身就是一個對象。使用System.out.print()打印時,它會調用Object類的toString()方法。這是在Object類中定義這樣 :

public String toString() { 
     return getClass().getName() + "@" + Integer.toHexString(hashCode()); 
    } 

打印您使用返回數組:

System.out.println(Arrays.toString(list2)); 

編輯
如果你想從你應該做的正是方法返回一個數組你在代碼中做了什麼。

假設,「合併」是一種方法和ARR1和ARR2是數組,那麼你可以這樣做:

public static int[] merge(int arr1[], int arr2[]) 
{ 
    int[] result = new int[arr1.length + arr2.length]; 
    int counter = 0 ; 
    for (int i =0 ;i < result.length ; i++) 
    { 
    if (i >= arr1.length) 
    { 
     result[i] = arr2[counter++]; 
    } 
    else 
    { 
     result[i] = arr1[i]; 
    } 
    } 
return result; 
} 

然後你就可以打印合併爲:

System.out.println(Arrays.toString(merge(arr1,arr2)); 
+0

非常感謝你! – 2013-03-02 08:42:02

+0

如果我想從一個方法獲取數組,那我該怎麼做? – 2013-03-02 08:42:33

+0

假設'merge'是一個方法,arr1和arr2是數組,System.out.println(merge(arr1,arr2)); - >這似乎沒有以我以前的問題類似的方式工作。 – 2013-03-02 08:43:40

1

您直接在數組上調用toString()(隱式)。數組不會覆蓋toString(),讓您得到default implementation from Object

Object類的toString方法返回一個包含其中的對象是一個實例,在 - 標記字符'之類的名稱的字符串@ ',以及對象的哈希碼的無符號十六進制表示。換句話說,該方法返回一個字符串等於值:

getClass().getName() + '@' + Integer.toHexString(hashCode()) 

所以在輸出中,[I部分是在int[]類的「名」(打印int[].class.getName(),它會表現出同樣的東西),數字是十六進制數組的哈希碼。 (它不會被覆蓋 - 它不考慮數組的內容)。

這與數組的來源無關 - 你會得到相同類型的輸出(與不同的號碼):

System.out.print(list); 

調用reverse之前。

你應該使用Arrays.toString(int\[\])

System.out.println(Arrays.toString(list2));