28.基础语法-健康饮食计划案例02

28 健康饮食计划案例02

28.1 代码实现

package com.itheima.healthy;

import java.text.DecimalFormat;
import java.util.Scanner;

public class HeimaHealthy {
    public static void main(String[] args) {
        // 1.录入用户信息
        // 1.1 创建 Scanner 对象
        Scanner scanner = new Scanner(System.in);

        // 1.2 录入身高
        System.out.print("请输入身高(单位:厘米): ");
        short height = scanner.nextShort();
        // 1.3 录入体重
        System.out.print("请输入体重(单位:千克): ");
        double weight = scanner.nextDouble();
        // 1.4 录入年龄
        System.out.print("请输入年龄: ");
        byte age = scanner.nextByte();
        // 1.5 录入性别
        // System.out.print("请输入性别(男/女): ");
        // String gender = scanner.next();  // 没有nextchar() 方法, 只能用next(), 字符串形式, 可以只输入一个字符
        System.out.print("请输入性别(0:男/1:女): ");  // 升级, 用户输入汉字不如数字方便
        byte gender = scanner.nextByte();  // 没有nextchar() 方法, 只能用next(), 字符串形式, 可以只输入一个字符
        // 1.6 录入活动级别
        // System.out.print("请输入活动级别(久坐/轻度/中度/高度): ");
        // String activityLevel = scanner.next();
        System.out.print("请输入活动级别(0:久坐/1:轻度/2:中度/3:高度): ");
        byte activityLevel = scanner.nextByte();

        // 2.计算BMI, 并且判断体型, 设定运动目标
        // 2.1 换算 米 计算BMI
        double heightInMeters = height / 100.0 ; // 身高转换成米, 100.0 不会因为浮点数精度问题, 丢失精度
        double bmi = weight / (heightInMeters * heightInMeters);
        // 2.2 判断体型
        String bodyType="";
        if (bmi < 18.5) {
            bodyType = "偏瘦";
        } else if (bmi >= 18.5 && bmi < 24) {
            bodyType = "正常";
        } else if (bmi >= 24 && bmi < 28) {
            bodyType = "过重";
        } else {
            bodyType = "肥胖";
        }
        // 2.3 设定运动目标
        String goal="";
        if (bodyType.equals("偏瘦")) {
            goal = "增肌";
        } else if (bodyType.equals("过重") || bodyType.equals("肥胖")) {
            goal = "减脂";
        } else {
            goal = "保持";
        }
        DecimalFormat df = new DecimalFormat("0.00");  // 保留两位小数
        System.out.println("您的BMI是:" + df.format(bmi) + ",体型" + bodyType ); // 使用保留位数的bmi
        System.out.println("建议您持续:" + goal + ",加油!");

        // 3.计算每日摄入热量建议, 包括BMR/TDEE/每日热量
        // 3.1 计算BMR
        double bmr = 0;  // 先定义, 下面 if 再赋值, 避免空指针(即 直接if中使用,内存没有开辟空间, 造成空指针)
        if (gender == 0) {
            // 男性计算
            bmr = 88.362 + (13.397 * weight) + (4.799 * height) - (5.677 * age);
        } else if (gender == 1) {
            // 女性计算
            bmr = 447.593 + (9.247 * weight) + (3.098 * height) - (4.330 * age);
        }
        // 3.2 计算TDEE
        double activityFactor = 0;
        if (activityLevel == 0) {
            // 久坐
            activityFactor = 1.2;
        } else if (activityLevel == 1) {
            // 轻度
            activityFactor = 1.375;
        } else if (activityLevel == 2) {
            // 中度
            activityFactor = 1.55;
        } else {
            // 高度
            activityFactor = 1.725;
        }
        double tdee = bmr * activityFactor;
        // 3.3 计算每日摄入热量
        double dailyCalories = tdee;
        if  (goal.equals("减脂")) {
            dailyCalories = tdee - 300;
        } else if (goal.equals("增肌")) {
            dailyCalories = tdee + 300;
        }

        // 4.计算每日摄入的营养素的质量
        double protein = dailyCalories * 0.3 / 4;
        double fat = dailyCalories * 0.2 / 9;
        double carbohydrate = dailyCalories * 0.5 / 4;

        // 5.输出结果
        DecimalFormat df2 = new DecimalFormat("0"); // 不保留小数
        System.out.println("================== 饮食计划:=======================");
        System.out.println("您的每日基础代谢为: " +  df2.format(bmr)  + "kcal, 结合运动后的总代谢: " +  df2.format(tdee)  + "kacl");
        System.out.println("结合您的运动目标, 建议您每日摄入: " +  df2.format(dailyCalories)  + "kcal, 其中:");
        System.out.println("蛋白质: " + df2.format(protein) + "克");
        System.out.println("脂肪: " +  df2.format(fat)  + "克");
        System.out.println("碳水化合物: " +  df2.format(carbohydrate)  + "克");
        System.out.println("==================================================");
    }
}

------------------------------------------------ 执行后
D:\Software\jdk17\bin\java.exe "-javaagent:D:\Software\JetBrainsIntelliJ IDEA 2025.2.4\lib\idea_rt.jar=5469" -Dfile.encoding=UTF-8 -classpath D:\Software\JavaCode\p1-basic\out\production\p1-basic com.itheima.healthy.HeimaHealthy
请输入身高(单位:厘米): 178
请输入体重(单位:千克): 72.5
请输入年龄: 31
请输入性别(0:男/1:女): 0
请输入活动级别(0:久坐/1:轻度/2:中度/3:高度): 0
您的BMI是:22.88,体型正常
建议您持续:保持,加油!
================== 饮食计划:=======================
您的每日基础代谢为: 1738kcal, 结合运动后的总代谢: 2085kacl
结合您的运动目标, 建议您每日摄入: 2085kcal, 其中:
蛋白质: 156克
脂肪: 46克
碳水化合物: 261克
==================================================

Process finished with exit code 0

———————————————————————————————————————————————————————————————————————————

                                                                                                                         无敌小马爱学习

posted on 2025-12-24 10:30  马俊南  阅读(9)  评论(0)    收藏  举报