创建带加速与制动功能的Car类时出现逻辑错误求助
代码问题排查与修复
核心问题分析
- 调用空方法:你在
CarRun的循环里调用的是accelerateSpeed(),但这个方法内部完全是空的,没有任何加速逻辑,等于没执行任何操作。 - 加速方法逻辑错误:就算改成调用
accelerate(),里面的if (Speed !=0)判断完全不合理——初始速度就是0,这个条件永远不成立,根本不会执行速度递增的代码,所以速度一直停留在0。 - 额外潜在问题:
brake()里的if (Speed !=90)会导致速度变成负数(比如速度为0时还会减5);setSpeed()方法里的speed = speed;是无效赋值;Speed用静态变量会让所有Car实例共享同一个速度,不符合面向对象设计。
修复后的代码
Car类
public class Car { // 将静态速度改为非静态,每个车辆实例拥有独立速度 private int speed = 0; private String make = "Ford"; private int yearModel = 2013; // 移除未使用的参数i,规范构造方法 public Car(String n, int model) { make = n; yearModel = model; } // 改为非静态方法,对应实例的速度 public int getSpeed() { return speed; } public String getMake() { return make; } // 规范方法名首字母大写 public int getYearModel() { return yearModel; } // 修正加速逻辑:添加速度上限(比如90),移除错误判断 public void accelerate() { if (speed < 90) { speed += 5; } } // 修正制动逻辑:只有速度大于0时才减速,避免负数 public void brake() { if (speed > 0) { speed -= 5; } } // 修正设置速度的逻辑,添加范围校验 public void setSpeed(int speed) { if (speed >= 0 && speed <= 90) { this.speed = speed; } } // 移除空的accelerateSpeed方法,避免混淆 }
CarRun类
public class CarRun { public static void main(String[] str) { // 匹配修改后的构造方法参数 Car car1 = new Car("Ford", 2013); for (int i = 1; i <= 5; i++) { // 调用正确的accelerate()方法执行加速 car1.accelerate(); // 调用实例的getSpeed()获取当前速度 System.out.println("Current speed is: " + car1.getSpeed()); } for (int j = 1; j <= 5; j++) { car1.brake(); System.out.println("Current speed is: " + car1.getSpeed()); } } }
修复后效果
运行代码后,第一次循环会将速度从0逐步提升到25(每次+5,共5次),第二次循环会将速度从25逐步降到0(每次-5,共5次),完全符合预期。
内容的提问来源于stack exchange,提问作者Keel
相关产品推荐
相关产品推荐

