我一直在尝试使用java中的简单整数数组实现冒泡排序。但是似乎有一些问题。现在我知道使用ArrayList是最好的选择,我也会这样做。但是为什么不用简单的整数数组进行排序。这就是代码
package sort;
public class BubbleSort {
int array[]={1,5,3,32,54,6,87,5,1};
int temp=0;
public void enter(){
for(int i=0;i<array.length;i++){
for(int j=0;j<(array.length-i);j++){
if(array[j]>=array[j+1]){
temp=array[j];
array[j]=array[j+1];
array[j+1]=temp;
}
}
}
}
public void show(){
for(int i:array){
System.out.println(i);
}
}
public static void main(String str[]){
new BubbleSort().Enter();
new BubbleSort().Show();
}
}
它生成与输入相同的数组。什么都没有改变。简单数组和ArrayList或Vector之间的区别只是它们提供了数组大小的动态时间扩展。还有什么更多吗?我的意思是简单数组每次操作时都会创建一个不同的实例,就像字符串一样?它似乎确实在这里这样做。
答案 0 :(得分:5)
因为您对一个实例进行排序并显示另一个实例。
new BubbleSort().Enter();
new BubbleSort().Show();
使用
BubbleSort bubbleSort = new BubbleSort();
bubbleSort.Enter();
bubbleSort.Show();
同样您应该将Enter()
重命名为enter()
,将Show()
重命名为show()
,至少可以说。
答案 1 :(得分:5)
问题是您没有为BubbleSort类的实例化指定名称。
new BubbleSort().Enter();
new BubbleSort().Show();
您的代码会创建一个新的BubbleSort类,然后对其进行排序。然后它创建了另一个新的(并且完全独立的)BubbleSort类,并显示了一个 - 而且它还没有被排序。
您想为变量命名,因此您可以对其进行排序,然后将其显示出来,如下所示:
BubbleSort myBubbleSort = new BubbleSort();
myBubbleSort.Enter();
myBubbleSort.Show();
作为附注(并在SiB的回答中指出),您可能还想查看Java Naming Conventions。遵循这些约定可使您的代码对其他Java程序员更易读,并包括诸如使用lowerCamelCase
作为方法名称和UpperCamelCase
作为类名称之类的内容。
答案 2 :(得分:3)
因为您正在创建两个不同的BubbleSort对象,所以排序第一个并显示不同的对象。
应该是......
public static void main(String str[]){
BubbleSort sort = new BubbleSort();
sort.Enter();
sort.Show():
}
答案 3 :(得分:1)
正确的BubbleSort代码是:
int temp = 0;
for (int i = 0; i < array.length; i++) {
for (int j = 1; j < (array.length - i); j++) {
if (array[j - 1] > array[j]) {
temp = array[j - 1];
array[j - 1] = array[j];
array[j] = temp;
}
}
}
我希望它可以帮助其他人寻找它。