解决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
相关产品推荐
相关产品推荐

