You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 04:24:04