1

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

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() 运算符 && 未定义参数类型 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

3 回答 3

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());
于 2012-11-17T05:55:54.977 回答
1

我建议将 a 添加int getCost()到 Vehicle 对象中,然后使用类似于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)) {
于 2012-11-17T05:56:15.053 回答
0

要实现该compareTo()方法,您必须实现Comparable<Type>接口并覆盖

public int compareTo(T o);

方法将返回 so 而不是

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.

然后只有工作

希望这会帮助你。

于 2012-11-17T05:56:33.853 回答