你会查看我的方法并让我知道我做错了什么吗?谢谢你:))
public static void sortByVehicleMakeModel(Vehicle[] vehicles) {
boolean swapped = true;
for(int y = 0; y < vehicles.length && swapped; y++) {
swapped=false;
for(int x = 0; x < vehicles.length - (y+1); x++) {
if(vehicles[x].getMake() && vehicles[x].getModel().compareTo(vehicles[x + 1].getMake() && vehicles[x].getModel())) {
swap(vehicles, x, x + 1);
swapped=true;
}
}
}
}
我的错误是在第二个语句.compareto() 运营商&amp;&amp;未定义参数类型java.lang.String,java.lang.String
但是,这段代码很好用:
public static void sortByOwnerName(Vehicle[] vehicles) {
boolean swapped = true;
for(int y = 0; y < vehicles.length && swapped; y++) {
swapped=false;
for(int x = 0; x < vehicles.length - (y + 1); x++) {
if(vehicles[x].getOwner().getName().compareTo(vehicles[x + 1].getOwner().getName())> 0) {
swap(vehicles, x, x + 1);
swapped=true;
}
}
}
}
答案 0 :(得分:1)
&&
的两个操作数都必须是boolean
表达式(true
或false
):
在下面中,其中一个或两个都是String
。
vehicles[x].getMake() && vehicles[x].getModel().compareTo(vehicles[x + 1].getMake() && vehicles[x].getModel())
您应该为Vehicle
Vehicle
个对象进行排序。
public class VehicleComparator implements Comparator<Vehicle> {
//...
public int compare(Vehicle v1, Vehicle v2) {
//..
}
}
并使用Arrays.sort()
方法。
Arrays.sort(vehicles, new VehicleComparator());
答案 1 :(得分:1)
我建议在Vehicle对象中添加int getCost()
,然后使用vehicles[x].getCost() > vehicles[x - 1].getCost()
之类的if语句。
此外,这种效率不高。也许Vehicle应该实现Comparable并使用Collections.sort()
进行排序。
请阅读您问题的更新。
试试这个:
if (vehicles[x].getMake().compareTo(vehicles[x - 1].getMake()) < 0 ||
(vehicles[x].getMake().compareTo(vehicles[x - 1].getMake()) == 0 &&
vehicles[x].getModel().compareTo(vehicles[x - 1].getModel()) < 0)) {
答案 2 :(得分:0)
如果getMake()和/或getModel()返回的是另一种类型而不是布尔值,那么这里有一个错误。
答案 3 :(得分:0)
要实现compareTo()
方法,您必须实现Comparable<Type>
接口并覆盖
public int compareTo(T o);
将返回的方法而不是
vehicles[x].getModel().compareTo(vehicles[x + 1....
你应该放置
vehicles[x].getModel().compareTo(vehicles[x + 1.... > -1 // or any constant which you want to say as invalid.
然后才开始工作
希望这会对你有所帮助。