2013-10-02 27 views
0

這段代碼有什麼問題我輸錯了。我不知道什麼是錯呢,我希望你能幫助我:打印陣列顯示錯誤的輸出

public class Main{ 
    public static void main(String[] args){ 
    int[] data={11,22,33,55,22,88,99,77}; 

    SortingAlgo algo=new SortingAlgo(); 
    data=algo.selectionSort(data); 
    System.out.println("numbers are"+ data); 
    } 
} 

其他類

public class SortingAlgo{ 
    public int[] selectionSort(int[] data){ 
    int lenD = data.length; 
    int j = 0; 
    int tmp = 0; 
    for(int i=0;i<lenD;i++){ 
     j = i; 
     for(int k = i;k<lenD;k++){ 
     if(data[j]>data[k]){ 
      j = k; 
     } 
     } 
     tmp = data[i]; 
     data[i] = data[j]; 
     data[j] = tmp; 
    } 
     return data; 
    } 
} 

這是我出來放:

numbers are[[email protected] 
+3

該輸出是正確的。你的期望是錯誤的。看看'Object#toString()'。 –

回答

7

輸出是完全沒問題。數組不會覆蓋toString()方法,因此它會調用Object#toString()方法,該方法會生成這種表示形式。輸出的形式爲:

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

對於數組,該Class#getName()方法使用了一些編碼不同元素類型來生成唯一的類名。編碼規則在文檔中指定。

要獲得人類可讀表示,可以使用Arrays#toString()方法:

System.out.println("numbers are"+ Arrays.toString(data)); 
4

了toString()數組被打破了。您需要

import java.util.Arrays; 

System.out.println("numbers are" + Arrays.toString(data)); 

這同樣適用於Arrays.equals(),Arrays.hashCode()。 Array,Arrays,ArrayUtils類增加了你可能喜歡的數組。

http://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html

http://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Array.html

http://docs.oracle.com/javase/7/docs/api/java/sql/Array.html

http://commons.apache.org/proper/commons-lang/javadocs/api-3.1/org/apache/commons/lang3/ArrayUtils.html

然而,你可能會發現你真的想要的ArrayList代替。

+1

我不會說它壞了。它只是沒有實施。我故意故意。 –

+0

@stonedsquirrel也許有一個很好的理由,我寧願得到'[I @ 2e4b1dd8'比價值,但我懷疑它。恕我直言它的破碎,因爲沒有'int []'類子行爲這種行爲。 –

+1

我能想到的一個就是性能/輸出大小。不是每次'toString()'被調用時,它清楚了它被調用的對象類型。擁有巨大的數組可能會導致性能下降或使日誌文件無法讀取。 –

4

data陣列int s。您應該使用Arrays#toString(),這是實現this way

3860  public static String toString(int[] a) { { 
3861  if (a == null) 
3862   return "null"; 
3863  int iMax = a.length - 1; 
3864  if (iMax == -1) 
3865   return "[]"; 
3866 
3867  StringBuilder b = new StringBuilder(); 
3868  b.append('['); 
3869  for (int i = 0; ; i++) { 
3870   b.append(a[i]); 
3871   if (i == iMax) 
3872    return b.append(']').toString(); 
3873   b.append(", "); 
3874  } 
3875 } 

確保你瞭解它,它會幫助你瞭解陣列。

您可以循環在陣列上,並手動打印:

for(int i: data) { 
    System.out.println(i + " "); 
} 

這樣您可以控制在哪些值進行打印,例如偶數值:

for(int i: data) { 
    if(i % 2 == 0) { 
     System.out.println(i + " "); 
    } 
} 

關於你所得到的輸出,這是關於它的解釋:

在Java中,每個對象已經toString()方法,默認是顯示類名錶示,然後添加@,然後加上哈希碼。