Java车辆行驶距离计算程序getDistance()方法运行异常求助
问题根因
Distance类的带参构造方法为空,传入的速度、时长参数没有赋值给类的私有成员变量speed和hours,导致两个成员变量一直保留类型默认值(speed默认0.0,hours默认0),所以getDistance()计算结果永远为0。DistanceDemo.java中使用了Scanner类但没有导入对应的依赖包,编译阶段就会报错。
修复后完整代码
1. Distance.java
//Distance.java public class Distance { private double speed; // 车辆行驶速度 private int hours; // 行驶时长 /** * 构造方法,传入车辆速度和行驶时长初始化对象 */ public Distance(double s, int h) { this.speed = s; this.hours = h; } /** * setSpeed方法设置车辆速度 */ public void setSpeed(double s) { speed = s; } /** * setHours方法设置行驶时长 */ public void setHours(int h) { hours = h; } /** * getSpeed方法返回车辆行驶速度 */ public double getSpeed() { return speed; } /** * getHours方法返回行驶时长 */ public int getHours() { return hours; } /** * getDistance方法返回行驶总距离 */ public double getDistance() { return speed * hours; } }
2. DistanceDemo.java
//DistanceDemo.java import java.util.Scanner; public class DistanceDemo { public static void main(String[] args) { double speed; // 车辆速度 int maxHours; // 总行驶时长 int period; // 时段计数器 // 创建Scanner对象接收键盘输入 Scanner keyboard = new Scanner(System.in); // 获取输入的速度 System.out.print("输入车辆行驶速度(单位:mph):"); speed = keyboard.nextDouble(); // 校验速度合法性 while (speed < 1) { System.out.println("请输入合法的速度值:"); speed = keyboard.nextDouble(); } // 获取输入的行驶时长 System.out.print("输入车辆总行驶小时数:"); maxHours = keyboard.nextInt(); // 校验时长合法性 while (maxHours < 1) { System.out.println("请输入合法的时长:"); maxHours = keyboard.nextInt(); } // 输出报表表头 System.out.println("小时\t行驶距离"); System.out.println("----------------------------------"); // 循环输出每个小时对应的行驶距离 period = 1; while (period <= maxHours) { // 为当前时段创建Distance对象 Distance d = new Distance(speed, period); // 输出当前时段行驶距离 System.out.println(period + "\t\t" + d.getDistance()); // 时段计数+1 period++; } keyboard.close(); } }
修复后程序可正常运行,输入合法参数后会生成要求的逐小时行驶距离统计报表,额外补充了Scanner资源关闭逻辑避免资源泄漏。
内容的提问来源于stack exchange,提问作者planetoidLV
相关产品推荐
相关产品推荐

