首页 > 解决方案 > 为什么我不能从这个枚举中得到我想要的数据?

问题描述

我需要知道:为什么我不能将 maxSpeed 作为 int 而不是 Integer 传递给方法?

为什么它使用“getMaxSpeed.equals(speed)”方法工作但不能比较小于/大于?(我认为是因为 maxSpeed 是 Integer 而不是 int,对吧?)。代码不能用 compareTo 编译。

我需要获取 maxSpeed 大于“速度”的所有汽车的列表,我该怎么做?

如何不仅返回名称(BMW、Mercedes)而且返回engineCc?

尝试对原语使用普通运算符,对对象使用方法。

enum CarData {

    BMW (230, 3000),
    Mercedes (220, 2500);

        private int maxSpeed;       
        private int engineCc;

        CarData (int maxSpeed, int engineCc) {
        this.maxSpeed = maxSpeed;
        this.engineCc = engineCc;
        }

        Integer getMaxSpeed(){
        return maxSpeed;
        }

        int getEngineCc() {
        return engineCc;
        }

    public static CarData getByMaxSpeed (int speed) {
    for (CarData carData : CarData.values()){
    if (carData.getMaxSpeed() => speed) 
        return carData;
        }
    return null;
    }
}

public class VehicleInfo {

    public static void main (String [] args){

        System.out.println (CarData.getByMaxSpeed(200));

    }
}

预期结果是“BMW、Mercedes”或“3000、2500”,无论我需要哪个。

标签: javafor-loopenumsequals

解决方案


int 是 Java 中的原始数据类型。Integer 是一个包装类。您不能以与基元相同的方式比较包装类的实例(如 Integer),使用 Integer 您必须使用方法,而使用基元则更简单。对于输出尝试覆盖枚举中的 toString 方法,此 toString 方法继承自 Object 类。完整的课程将是

enum CarData {

BMW(230, 3000),
Mercedes(220, 2500);

private int maxSpeed;
private int engineCc;

/* This method was added/overwritten */
@Override
public String toString() {
    return name() + ", Cc: " + engineCc;
}

CarData(int maxSpeed, int engineCc) {
    this.maxSpeed = maxSpeed;
    this.engineCc = engineCc;
}

Integer getMaxSpeed() {
    return maxSpeed;
}

int getEngineCc() {
    return engineCc;
}

public static CarData getByMaxSpeed(int speed) {
    for (CarData carData : CarData.values()) {
       //Here I replaced the => by >=
        if (carData.getMaxSpeed() >= speed) {
            return carData;
        }
    }
    return null;
}

}

公共类车辆信息 {

public static void main(String[] args) {

    System.out.println(CarData.getByMaxSpeed(200));

}

} }

和输出:

宝马,抄送:3000

如果您想要不同的字符串,只需自定义 toString 方法中的返回值,您还必须将 => 替换为 >= 进行比较。

希望这可以帮助。


推荐阅读