Java脂肪克数计算器输入验证问题:跨方法变量传递求助
解决脂肪克数计算器的输入验证问题
核心问题是getCalories方法无法访问main方法中已获取的fatGrams变量,因为变量作用域不匹配。下面是具体的修复方案:
修复步骤
- 给
getCalories方法添加参数:让它接收已获取的fatGrams值,这样就能用该值验证卡路里输入是否符合要求。 - 修改
main方法中的调用逻辑:调用getCalories时传入已经获取到的fatGrams。 - 优化Scanner使用:避免在多个方法中重复创建Scanner实例,提升代码效率。
- 修复
showPercent中的循环问题:将无限循环的while改为if,避免重复输出提示。
修改后的完整代码
import java.util.Scanner; class FatCalculator { // 类名遵循大驼峰命名规范 public static void main(String[] args) { Scanner keyboard = new Scanner(System.in); // 只创建一次Scanner double fatGrams, calories; fatGrams = getFat(keyboard); calories = getCalories(keyboard, fatGrams); // 传入fatGrams参数 showPercent(fatGrams, calories); keyboard.close(); // 用完关闭资源 } public static double getFat(Scanner keyboard) { double input; System.out.println("请输入脂肪克数:"); input = keyboard.nextDouble(); // 验证脂肪克数不能为负 while (input < 0.0) { System.out.println("脂肪克数不能小于0。"); System.out.println("请重新输入脂肪克数:"); input = keyboard.nextDouble(); } return input; } public static double getCalories(Scanner keyboard, double fatGrams) { // 添加fatGrams参数 double input; System.out.println("请输入卡路里值:"); input = keyboard.nextDouble(); // 验证卡路里不能为负,且不能小于脂肪克数×9 while (input < 0.0 || input < (fatGrams * 9)) { System.out.println("卡路里值不能小于0,且不能低于脂肪克数×9。"); System.out.println("请重新输入卡路里值:"); input = keyboard.nextDouble(); } return input; } public static void showPercent(double fatGrams, double calories) { double finalPercentage = (fatGrams * 9) / calories; System.out.println("脂肪提供的卡路里占比为:" + finalPercentage); // 修复while为if,避免无限循环输出 if (finalPercentage < 0.3) { System.out.println("该食物属于低脂肪食物。"); } } }
关键说明
- 通过参数传递
fatGrams,既避免了重复让用户输入,又符合变量作用域的规范,是最合理的解决方案。 - 统一使用一个Scanner实例,避免资源浪费,同时在程序结束时关闭Scanner,养成良好的资源管理习惯。
- 修正了
showPercent中的while循环问题,原代码会无限输出提示,改为if后只会输出一次正确结果。
内容的提问来源于stack exchange,提问作者Deison Suarez
相关产品推荐
相关产品推荐

