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

解决Java calcMilesTraveled报NoSuchElementException错误

错误产生原因
  • 方法逻辑不符合题目设计要求:题目明确要求calcMilesTraveled()接收外部传入的参数完成计算,你在方法内部额外创建了Scanner实例监听控制台输入,完全没有使用方法形参传入的分钟数值,和题目“不依赖手动输入、支持任意传参”的要求相悖。
  • 异常直接触发逻辑:在线练习平台的评测系统运行代码时,不会向控制台输入测试值,Scanner调用nextDouble()时读取不到任何输入内容,就会直接抛出java.util.NoSuchElementException。你手动输入时程序能正常运行,本质是你手动给等待输入的Scanner喂了需要的值,但这种实现完全达不到题目封装通用计算逻辑的目的。
  • 存在隐藏编译问题:你写的calcMilesTraveled()是普通成员方法,而main()是静态方法,就算解决了输入问题,直接在main里调用该方法还会触发“静态上下文无法引用非静态方法”的编译错误,需要同步调整。
符合要求的修改方案

核心调整逻辑:

  • 删除方法内所有Scanner相关的输入代码,方法只保留计算逻辑
  • 直接使用方法形参接收到的两个数值做里程运算,不额外读取外部输入
  • 给方法加上static修饰,适配main方法的静态调用场景(也可通过创建类实例调用非静态方法,静态写法更适配本题简化代码的需求)

修改后的calcMilesTraveled()方法实现:

public static double calcMilesTraveled(double milesPerHour, double minutesTraveled){
   double hoursTraveled = minutesTraveled / 60.0;
   return milesPerHour * hoursTraveled;
}

替换原有main方法中的重复计算段,完整可运行代码如下:

public class CalcMiles {
   public static double calcMilesTraveled(double milesPerHour, double minutesTraveled){
      double hoursTraveled = minutesTraveled / 60.0;
      return milesPerHour * hoursTraveled;
   }

   public static void main(String [] args) {
      double milesPerHour = 70.0;
      double minutesTraveled = 100.0;
      // 直接调用封装好的方法获取结果,替换原有重复计算逻辑
      double milesTraveled = calcMilesTraveled(milesPerHour, minutesTraveled);
      System.out.println("Miles: " + milesTraveled);
   }
}

修改后的方法完全实现通用计算逻辑:传入任意时速、任意旅行分钟数都可以直接返回对应里程值,不需要任何控制台输入,既消除了运行报错,也完全符合题目封装逻辑、简化重复代码的要求。


内容的提问来源于stack exchange,提问作者Vincent Curry

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 01:01:14