当前位置: 首页 > 知识库问答 >
问题:

基元类型双重错误

韩阳云
2023-03-14

对不起,如果我的问题看起来很愚蠢。我在 .compareTo() 上遇到错误 无法在基元类型双精度上调用比较To(双精度)!我该如何解决这个问题?谢谢!

车辆等级:

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

共有3个答案

黄博艺
2023-03-14

compareTo 方法在预处理类型上不可用。使用包装器双精度型:

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

请注意:双精度值的(双精度)返回包装器类型双精度,值为双精度

请注意:如果您的目标是使用 compareTo,那么否则很好,您可能希望使用比较运算符直接比较双精度值

程祯
2023-03-14

< code>if(车辆[x].getCost()。compareTo(车辆[x 1]。getCost()))

你需要

董奇思
2023-03-14

get成本()方法的返回类型从Double更改为Double,它就都可以工作了。自动装箱将处理其余的事情。

 类似资料:
  • J.Bloch在《Effective Java》中提到,将varargs方法与基元类型一起使用是不安全的。简而言之,的返回类型为,这听起来很合理。现在我试图自己复制这种行为,但做不到: 我的问题是,为什么类型被推导为,而不是像他所说的那样被推导为?这是否意味着,在Java8中,关于varargs的问题不再相关了,如果我们不太关心性能,我们可以在任何地方安全地使用它们。

  • 我目前正在读一本名为Java的完整参考的书。第18章介绍了基元类型包装器。 正如本书第一部分所提到的,出于性能原因,Java使用基本类型,如int和char。这些数据类型不是对象层次结构的一部分。它们通过值传递给方法,不能直接通过引用传递。另外,有时两个方法无法引用同一个int实例,您需要为这些基元类型之一创建对象表示。例如,第19章讨论的集合类只处理对象;若要在这些类中的一个中存储基元类型,需要

  • 我想到这个问题是因为我在某处读到Java不是纯面向对象的语言,因为它使用的是原语(不是对象)。我同意这一点。现在我的问题是,为什么我们使用,而我们已经有了相同类型的对象?

  • 7.11. 基于类型断言区别错误类型 思考在os包中文件操作返回的错误集合。I/O可以因为任何数量的原因失败,但是有三种经常的错误必须进行不同的处理:文件已经存在(对于创建操作),找不到文件(对于读取操作),和权限拒绝。os包中提供了这三个帮助函数来对给定的错误值表示的失败进行分类: package os func IsExist(err error) bool func IsNotExist(

  • 以下是我的清单: 我想问题出在“路易”和“大虾”,因为列表是空的。我该怎么解决呢?

  • 如果按照“字节”->“短”->“int”->“长”->“浮点”->“双倍”的自动转换,那么输出应该打印“双倍”,对吗? (https://www.geeksforgeeks.org/type-conversion-java-examples/)