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()将您的方法的返回类型从doubleto更改为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方法不适用于原始类型。用作Wrapper Double

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

请注意:Double.valueOf(double)Double返回值为的 Wrapper 类型double

请注意:如果您的目标是使用compareTo,那么它很好,否则您可能希望使用适当的double比较运算符直接比较值。<, >, ==

于 2012-11-17T06:39:45.447 回答
0

我将其更改为:

public Double getCost() 

代替

public double getCost(){ 
return cost; 
}
于 2012-11-17T07:17:36.607 回答
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()必须返回一个对象,String并且compareTo方法接受一个对象作为参数。

此代码不起作用

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

因为vehicles[x + 1].getCost()不能返回一个对象(在你的情况下它必须返回一个原语double)所以类型不匹配并且编译器抱怨没有这样的compareTo方法可以接受double(原语)

于 2012-11-17T06:41:41.590 回答