BubbleSort -my代码返回随机地址

时间:2013-08-13 01:00:48

标签: java bubble-sort

我已经实现了BubbleSort算法的代码,但它返回了一个奇怪的错误,请你告诉我这是什么问题?

public class BubbleSort {

    public static int[] unsorted = new int[5];

    public void assignRandom(){
        for(int i = 0; i < unsorted.length; i++){
            unsorted[i] = (int)(Math.random()*10) + 10;
        }
    }

    public void swapValues(int first, int second){

        int temp = unsorted[first];
        unsorted[first] = unsorted[second];
        unsorted[second] = temp;
    }

    public void bubbleSort() {

        for(int i = unsorted.length - 1; i >= 0; i--){
            for(int j = 0; j < i; j++){
                if(unsorted[j] > unsorted[j+1])
                    swapValues(j,j+1);
                }
            }
    System.out.print(unsorted);
    }

    public static void main(String[] args){

        BubbleSort newBubble = new BubbleSort();
        newBubble.assignRandom();
        newBubble.bubbleSort();
   }
}

这基本上是一个执行bubblesort的代码(assignmRandom用于为数组分配随机值然后排序)

它返回:[I @ 1658fe12

6 个答案:

答案 0 :(得分:4)

这不是随机地址。这是toString的{​​{1}}表示形式:

int[]

[I@1658fe12 表示数组,[表示整数,I表示数组的1658fe12。此表示来自documentation

  

hashCode

而且,Class.getName

  

如果此类对象表示一个数组类,则名称的内部形式由元素类型的名称组成,前面是一个或多个getClass().getName() + '@' + Integer.toHexString(hashCode())个字符,表示数组嵌套的深度。元素类型名称的编码如下:

     

元素类型:'[',编码:int

数组的I是从hashCode继承的标识hashCode,它大致代表数组的内存位置(不是完全;细节,总是细节)。

如果要打印数组,则必须说

Object

for(int i = 0; i < unsorted.length; i++) {
    System.out.println(unsorted[i]);
}

答案 1 :(得分:1)

您不能像这样打印Java数组的元素。相反,迭代数组的所有元素并单独打印它们。

for (int i: unsorted) {
  System.out.println(i);
}

答案 2 :(得分:1)

你的泡泡排序很好。但是你打印阵列的方式是错误的。您正在打印数组对象,它给出了下面的结果,

[I@1658fe12 

尝试将数组打印为

    for (int a : unsorted)
        System.out.println(a);

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

答案 3 :(得分:0)

public static int[] unsorted = new int[5];

这里 unsorted是int 类型的对象,它包含5个int值。

 System.out.print(unsorted);

您基本上是打印 toString 表示

getClass().getName() + '@' + Integer.toHexString(hashCode())。 对象数组。

循环遍历数组并打印值。 unsorted[i]. i ranges from 0 to 4

答案 4 :(得分:0)

使用以下声明替换错误的阵列打印行:

System.out.print(Arrays.toString(unsorted));

答案 5 :(得分:0)

正如其他所有答案所说,您正在打印内存地址,而不是数组。但是,您可以使用System.out.print(Arrays.toString(unsorted))代替使用for循环来打印数组,而不是使用{{1}}。