0

我已经实现了 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();
   }
}

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

它返回:[I@1658fe12

4

6 回答 6

4

这不是一个随机地址。那是 a 的toString表示int[]

[I@1658fe12

[表示数组,I表示整数,并且1658fe12hashCode数组的。此表示来自文档

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

并且,对于Class.getName

如果该类对象表示一类数组,则名称的内部形式由元素类型的名称组成,前面有一个或多个'['表示数组嵌套深度的字符。元素类型名称的编码如下:

元素类型:int,编码:I

hashCode数组的 是从其继承的标识,hashCodeObject近似表示数组的内存位置(不完全是;细节,总是细节)。

如果你想打印一个数组,你必须说

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

或者

System.out.println(Arrays.toString(unsorted));
于 2013-08-13T01:15:18.607 回答
1

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

for (int i: unsorted) {
  System.out.println(i);
}
于 2013-08-13T01:12:04.727 回答
1

你的冒泡排序很好。但是您打印阵列的方式是错误的。您正在打印数组对象,它会为您提供以下结果,

[I@1658fe12 

尝试将您的阵列打印为

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

或者

System.out.println(Arrays.toString(unsorted));
于 2013-08-13T01:14:53.980 回答
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

于 2013-08-13T01:13:58.370 回答
0

用以下语句替换错误的数组打印行:

System.out.print(Arrays.toString(unsorted));
于 2013-08-13T01:16:01.003 回答
0

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

于 2013-08-13T01:16:30.470 回答