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

Java脂肪克数计算器输入验证问题:跨方法变量传递求助

解决脂肪克数计算器的输入验证问题

核心问题是getCalories方法无法访问main方法中已获取的fatGrams变量,因为变量作用域不匹配。下面是具体的修复方案:

修复步骤

  1. 给getCalories方法添加参数:让它接收已获取的fatGrams值,这样就能用该值验证卡路里输入是否符合要求。
  2. 修改main方法中的调用逻辑:调用getCalories时传入已经获取到的fatGrams。
  3. 优化Scanner使用:避免在多个方法中重复创建Scanner实例,提升代码效率。
  4. 修复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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 17:47:53