我需要知道:
为什么不能将maxSpeed作为整数而不是整数传递给方法?
为什么使用“ getMaxSpeed.equals(speed)”方法工作却不能比较小于/大于? (我认为是因为maxSpeed是Integer而不是Int,对吗?)。该代码无法使用compareTo进行编译。
我需要获取所有maxSpeed大于“ speed”的汽车的清单,该怎么办?
我不仅要返回名称(宝马,梅赛德斯),而且还要返回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));
}
}
预期的结果是“宝马,梅赛德斯”或“ 3000,2500”,无论我需要哪个。
最佳答案
int是Java中的原始数据类型。
整数是包装器类。您不能像使用基元一样来比较包装类(例如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;
}
}
公共类VehicleInfo {
public static void main(String[] args) {
System.out.println(CarData.getByMaxSpeed(200));
}
}
}
并输出:
宝马,抄送:3000
如果要使用其他字符串,只需在toString方法中自定义返回值,还必须用> =替换=>进行比较。
希望这可以帮助。
关于java - 为什么我无法从此枚举中获取所需的数据?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57380845/