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

私のエラーは 2 番目のステートメントにあります。compareto() 演算子 && は、引数の型に対して未定義です。

ただし、このコードは問題なく動作します。

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

の両方のオペランドは、式 ( または のいずれか)である&&必要があります。booleantruefalse

以下では、それらのいずれかまたは両方が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

int getCost()Vehicle オブジェクトに a を追加してから、 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);

代わりにそう返すメソッド

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 に答える