2017-08-09 172 views
-2

嘿,我試圖測試我的選擇排序算法,但我在控制檯中得到的所有輸出只是「[I @ 15db9742」 有人請解釋我爲什麼會收到垃圾郵件?這真的讓我感到莫名其妙,這可能是IDE的問題,還是代碼中的東西?Java選擇排序實現不工作的輸出「[I @ 15db9742」

感謝

import java.util.Arrays; 


public class SelectionSorterTest { 

    // Factories 

    // Queries 

    /** 
    * Sorts a copy of the input array. 
    * @param input an array. 
    * @return a sorted copy of input. 
    */ 
    public static int[] sort (int[] input) { 
     int[] sorted = Arrays.copyOf(input, input.length); 
     for(int i = 0; i < sorted.length - 1; i++) 
     { 
      int minIndex = i; 
      for(int j = i + 1; j < sorted.length - 1; j++) 
      { 
       if(sorted[j] < sorted[minIndex]) 
       { 
        minIndex = j; 
       } 
      } 
      if(i != minIndex) 
      { 
       swap(sorted, minIndex, i); 
      } 
     } 
     return sorted; 
    } 


    // Commands 

    // Private 

    // disabled constructor 
    private SelectionSorterTest() { } 

    private static void swap (int[] arr, int x, int y) { 
     int temp = arr[x]; 
     arr[x] = arr[y]; 
     arr[y] = temp; 
    } 

    public static void main(String[] args) 
    { 
     int[] Array = {9,7,6,4,3,2,21,1}; 
     System.out.println(sort(Array)); 

    } 

} 
+1

'的System.out。println(sort(Array));'你正在打印一個數組,以便你得到這個數組在內存中的地址。使用循環打印該數組的元素! –

+0

我真金!出於某種原因,它不排序最後一個元素。 但是,謝謝! [2,3,4,6,7,9,21,1] –

+0

你的算法不正確,你缺少循環中數組的最後一個元素,刪除'-1'部分來糾正它 –

回答

0

通過使用此行System.out.println(sort(Array));您正在打印出陣列的地址在內存中。使用循環打印該數組的元素! 順便說一句,你的算法是不正確的,因爲你缺少for循環的最後一個元素。將-1零件移出循環以糾正它。由於

+1

謝謝,對不起愚蠢的問題。在學習這些東西時,我們都有這些腦力激盪的時刻 –

0

您在控制檯上直接打印數組對象。使用java.util.Arrays.toString(int[])方法。它返回指定int數組內容的字符串表示形式。

在你的情況下,它將是System.out.println(Arrays.toString(sort(Array)));

0

我@ 15db9742是調用長[]的結果。的toString(),由長[]加上的 '@' 的類型簽名加的hashCode()(謝謝EJP)

訪問數組中的元素將其打印出來。

public static void main(String[] args) 
{ 
    int[] Array = {9,7,6,4,3,2,21,1}; 
    for(int n : sort(Array)){ 
     System.out.println(n); 
    } 
} 
+0

這是調用'long []。toString()'的結果,包含'long []'的類型簽名加上'@'加上'hashCode()'。不是內存地址。 – EJP

0

的問題是,你直接打印陣列控制檯:

  • 你需要使用Arrays.toString(anArray)或您的自定義函數:

在使用數組的情況下,的ToString(anArray):

  • 首先,你需要Arrays類導入到我們的節目:

    import java.util.Arrays; 
    
  • 其次然後改變你的打印語句從:

    System.out.println(sort(Array)); 
    

    System.out.println(Arrays.toString(sort(Array))); 
    

在您的自定義方法的情況下:

  • 實現自己功能像這樣的,只是爲了排除括號:

    private static void printArray(int[] anArray) { 
        StringBuilder sb = new StringBuilder(); 
        for (int i = 0; i < anArray.length; i++) { 
        if (i > 0) { 
         sb.append(", "); 
        } 
        sb.append(anArray[i]); 
        } 
        System.out.println(sb.toString()); 
    

    }

  • ,改變你的print語句是:

    System.out.println(printArray(sort(Array)));