对不起,如果我的问题看起来很愚蠢。我在 .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;
}
}
}
}
compareTo
方法在预处理类型上不可用。使用包装器双精度
型:
if(Double.valueOf(vehicles[x].getCost())
.compareTo(Double.valueOf(vehicles[x + 1].getCost()))>0){
请注意:双精度值的(双精度)返回包装器类型双精度
,值为双精度
。
请注意:如果您的目标是使用 compareTo
,那么否则很好,您可能希望使用比较运算符直接比较双精度值
< code>if(车辆[x].getCost()。compareTo(车辆[x 1]。getCost()))
你需要
将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/)