我已经实现了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
答案 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}}。