2

私の質問が非常に愚かに見える場合は申し訳ありません。.compareTo()でエラーが発生しますプリミティブ型doubleでcompareTo(double)を呼び出せません!どうすればこれを修正できますか?ありがとうございました!

車両クラス:

public class Vehicle implements IOutput {
private double cost;}

public double getCost(){
        return cost;
    }

配列クラス:

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].getCost().compareTo(vehicles[x + 1].getCost()) > 0){
                swap(vehicles, x, x + 1);
                swapped=true;
            }
        }
    }
}

私の他のコードは正常に機能します:

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

6 に答える 6

3

getCost()メソッドの戻り値のタイプをからdoubleに変更するDoubleと、すべて機能します。残りはオートボクシングが担当します。

于 2012-11-17T06:44:50.383 に答える
1

if(vehicles[x].getCost().compareTo(vehicles[x + 1].getCost()))

>0どこかに必要です!

于 2012-11-17T06:39:38.337 に答える
1

compareToメソッドは、premitiveタイプでは使用できません。用途Wrapper Double

     if(Double.valueOf(vehicles[x].getCost())
          .compareTo(Double.valueOf(vehicles[x + 1].getCost()))>0){

注意:Double.valueOf(double)Doubleは、値が。のラッパータイプを返しますdouble

注意:目的が使用することcompareToである場合はそれ以外の場合は問題ありませんが、必要に応じdoubleて比較演算子を使用して値を直接比較することをお勧めし<, >, ==ます。

于 2012-11-17T06:39:45.447 に答える
0

doubleプリミティブ型である参照型でのみメソッドを呼び出すことができます。エラーメッセージが示唆するように、をvehicles[x].getCost()返しますdouble

あなたができることの一つは、手動であなたをボックスに入れることdoubleですDouble

int costComp = Double.valueOf(vehicles[x].getCost()).compareTo(Double.valueOf(vehicles[x + 1].getCost());

if(costComp < 0) {
    //...
} else if(costComp == 0) {
    //...
} else {
    //...
}
于 2012-11-17T06:39:42.843 に答える
0

このコードは正常に機能します

if(vehicles[x].getOwner().getName().compareTo(vehicles[x+1].getOwner().getName())> 0)

vehicles[x+1].getOwner().getName()のオブジェクトを返す必要がありStringcompareToメソッドはオブジェクトを引数として受け入れるためです。

このコードは機能しません

if(vehicles[x].getCost().compareTo(vehicles[x + 1].getCost()))

vehicles[x + 1].getCost()オブジェクトを返さないようにする必要があるため(この場合はプリミティブを返す必要があります) 、型に不一致があり、コンパイラは(プリミティブ)を受け入れるdoubleようなメソッドがないと文句を言います。compareTodouble

于 2012-11-17T06:41:41.590 に答える
0

私はこれをに変更しました:

public Double getCost() 

それ以外の

public double getCost(){ 
return cost; 
}
于 2012-11-17T07:17:36.607 に答える