String.compareTo比较方法

时间:2012-11-17 05:45:01

标签: java compareto

你会查看我的方法并让我知道我做错了什么吗?谢谢你:))

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;
            }
        }
    }
}

4 个答案:

答案 0 :(得分:1)

&&的两个操作数都必须是boolean表达式(truefalse):

在下面中,其中一个或两个都是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.

然后才开始工作

希望这会对你有所帮助。