所以在我描述问题之前,这是一个场景。我创建了两个类,一个实现可比较的城市和作为城市的子类的AncientCity。
City有一个已实施的compareTo方法,该方法比较城市的人口并返回某个整数。
与AncientyCity相同,但它与AncientCity的时代相比。
我创建了一个Utilities类,并实现了两种通用方法sort& printAll。
对于排序,我必须比较City或AncientCity的元素(我们不知道取决于我们在main方法中声明的内容)以及第一个元素是否恰好大于第二个元素,然后它交换第二个到第一个,第一个到第二个。
这是问题开始的地方,我无法通过排序方法按升序排列元素;我尝试过使用冒泡排序,但我无法让元素交换。
还有其他方法可以按升序排序吗?
顺便说一句,你不能使用Collections.sort(),这会破坏我的任务目的。
这是sort方法的一个片段(请记住我在继续比较City和/或AncientCity对象之前使用String类进行测试):
public static void sort(ArrayList<String> object){
for(int i = 0; i < object.size(); i++){
for(int j = 1; j < object.size(); j++ ){
String a = object.get(i);
String b = object.get(j);
String tmp = null;
if(a.compareTo(b) == 1){
tmp= b;
b = a;
a = tmp;
}
}
}
}
答案 0 :(得分:2)
您无法通过在方法中本地交换对象引用来交换值。我还建议你编程到List
界面。我建议> 0
而不是== 1
。您需要将j
初始化为i+1
,我会得到一次长度。像,
public static void sort(List<String> object) {
int length = (object != null) ? object.size() : 0;
for (int i = 0; i < length; i++) {
for (int j = i + 1; j < length; j++) {
String a = object.get(i);
String b = object.get(j);
if (a.compareTo(b) > 0) {
object.set(j, a);
object.set(i, b);
}
}
}
}