Java选择排序实现不工作输出“[I @ 15db9742”

时间:2017-08-09 04:13:43

标签: java selection-sort

嘿我正在尝试测试我的选择排序算法,但我在控制台中获得的所有输出只是“[I @ 15db9742” 有人可以向我解释为什么我会得到垃圾输出?这真让我感到困惑,可能是IDE的问题还是代码中的问题?

由于

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));

    }

}

4 个答案:

答案 0 :(得分:0)

您正在控制台上直接打印数组对象。

使用java.util.Arrays.toString(int[])方法。它返回指定int数组内容的字符串表示形式。

在您的情况下,它将是System.out.println(Arrays.toString(sort(Array)));

答案 1 :(得分:0)

I @ 15db9742是调用long []。toString()的结果,包括long []的类型签名加上&#39; @&#39;加上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);
    }
}

答案 2 :(得分:0)

通过使用此行System.out.println(sort(Array));,您将在内存中打印出数组的地址。使用循环打印该数组的元素! 顺便说一句,你的算法是错误的,因为你缺少for循环中的最后一个元素。从循环中删除-1部分以更正它。感谢

答案 3 :(得分:0)

问题是您将阵列直接打印到控制台:

  • 您需要使用Arrays.toString(anArray)或自定义函数:

如果使用Arrays.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)));