Java 学习笔记 —— BMI & BMR 计算器

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: 这是一个使用 Java 编写的 BMI 与 BMR 计算器小程序,可输入年龄、性别、身高和体重,计算身体质量指数(BMI)和基础代谢率(BMR),并输出健康评估结果。通过该项目,掌握了 Java 的输入处理、数据验证、条件判断、数学运算及格式化输出等基础知识,是 Java 初学者的理想练习项目。

Java 学习笔记 —— BMI & BMR 计算器

一、项目背景

今天练习了一个小程序,使用 Java 输入用户的年龄、性别、身高、体重,计算并输出:

  • BMI(Body Mass Index,身体质量指数)
  • BMR(Basal Metabolic Rate,基础代谢率)

这个小项目帮助我理解了:

  1. Scanner 的使用(输入数据)
  2. 循环与输入验证
  3. 条件判断 if-else
  4. 数学公式的实现
  5. 格式化输出

二、程序源码

package com.itheima.operate;

import java.util.Scanner;

public class HomeWork {
   
    public static void main(String[] args) {
   
        int age;
        String gender = "M";
        double weight = 0;
        double height = 0;

        Scanner scanner = new Scanner(System.in);

        // 输入年龄
        System.out.print("请输入年龄:");
        age = scanner.nextInt();
        System.out.println("已输入年龄" + age);

        // 输入性别(带验证)
        System.out.print("请输入性别:");
        while (true) {
   
            gender = scanner.next();
            if (gender.equals("M") || gender.equals("m") || gender.equals("F") || gender.equals("f")) {
   
                break;
            }
            System.out.println("性别输入错误,请再次输入:");
        }
        System.out.println("已输入性别" + gender);

        // 输入体重
        System.out.print("请输入体重(KG):");
        weight = scanner.nextDouble();
        System.out.println("已输入体重" + weight);

        // 输入身高
        System.out.print("请输入身高(CM):");
        height = scanner.nextDouble();
        System.out.println("已输入身高" + height);

        // 计算 BMI
        double BMI = weight / (height * height * 0.0001); // 注意身高单位转换
        System.out.print("您的BMI数值为: " + String.format("%.1f", BMI) + "\n您的体型:");
        if (BMI < 18.5) {
   
            System.out.println("偏瘦");
        } else if (BMI >= 18.5 && BMI < 25) {
   
            System.out.println("正常");
        } else if (BMI >= 25 && BMI < 30) {
   
            System.out.println("超重");
        } else if (BMI >= 30) {
   
            System.out.println("肥胖");
        } else {
   
            System.out.println("未知");
        }

        // 计算 BMR
        double BMR = 0;
        if (gender.equals("M") || gender.equals("m")) {
   
            // 男性公式
            BMR = 88.362 + (13.397 * weight) + (4.799 * height) - (5.677 * age);
        } else {
   
            // 女性公式
            BMR = 447.593 + (9.247 * weight) + (3.098 * height) - (4.330 * age);
        }
        System.out.print("您的BMR数值为: " + String.format("%.1f", BMR));
    }
}

三、关键知识点总结

1. Scanner 输入

  • scanner.nextInt() → 读取整数
  • scanner.nextDouble() → 读取浮点数
  • scanner.next() → 读取字符串

2. 输入验证

while (true) {
   
    gender = scanner.next();
    if (gender.equals("M") || gender.equals("m") || gender.equals("F") || gender.equals("f")) {
   
        break; // 输入合法时跳出循环
    }
    System.out.println("性别输入错误,请再次输入:");
}
  • 使用 while(true) 循环不断检查输入是否合法。
  • equals 判断字符串,而不是 ==

3. BMI 公式

[BMI = \frac{\text{体重(kg)}}{\text{身高(m)}^2}]

👉 注意:身高输入的是 厘米 (cm),要转换成 米 (m),所以公式写成:

double BMI = weight / (height * height * 0.0001);

4. BMI 分类

  • < 18.5 → 偏瘦
  • 18.5 ~ 24.9 → 正常
  • 25 ~ 29.9 → 超重
  • ≥ 30 → 肥胖

5. BMR 公式(Harris-Benedict 修正版)

  • 男性:
    [BMR = 88.362 + (13.397 \times 体重kg) + (4.799 \times 身高cm) - (5.677 \times 年龄)]
  • 女性:
    [BMR = 447.593 + (9.247 \times 体重kg) + (3.098 \times 身高cm) - (4.330 \times 年龄)]

6. 格式化输出

String.format("%.1f", BMI); // 保留一位小数

四、运行示例

输入:

请输入年龄: 25
请输入性别: M
请输入体重(KG): 70
请输入身高(CM): 175

输出:

已输入年龄25
已输入性别M
已输入体重70.0
已输入身高175.0
您的BMI数值为: 22.9
您的体型: 正常
您的BMR数值为: 1673.6

五、学习收获

  1. 学会了 输入验证,防止用户输入非法数据。
  2. 理解了 BMI 和 BMR 的计算公式,能用 Java 实现。
  3. 掌握了 格式化输出,控制小数位数。
  4. 巩固了 条件判断与循环 的实际应用。

📌 以后可以扩展的功能:

  • 根据 BMR 计算每日所需总热量(结合活动系数)。
  • 根据 BMI & BMR 给出健康建议。
  • 把输入输出做成 图形界面(Swing/JavaFX)
相关文章
|
5月前
|
Java API 微服务
2025 年 Java 从入门到精通学习笔记全新版
《Java学习笔记:从入门到精通(2025更新版)》是一本全面覆盖Java开发核心技能的指南,适合零基础到高级开发者。内容包括Java基础(如开发环境配置、核心语法增强)、面向对象编程(密封类、接口增强)、进阶技术(虚拟线程、结构化并发、向量API)、实用类库与框架(HTTP客户端、Spring Boot)、微服务与云原生(容器化、Kubernetes)、响应式编程(Reactor、WebFlux)、函数式编程(Stream API)、测试技术(JUnit 5、Mockito)、数据持久化(JPA、R2DBC)以及实战项目(Todo应用)。
313 5
|
2月前
|
Java
Java 数组学习笔记
本文整理Java数组常用操作:遍历、求和、查找、最值及二维数组行求和等典型练习,涵盖静态初始化、元素翻倍、去极值求平均等实例,帮助掌握数组基础与应用。
|
8月前
|
存储 Java
# 【Java全栈学习笔记-U1-day02】变量+数据类型+运算符
本篇笔记主要围绕Java全栈学习的第二天内容展开,涵盖了变量、数据类型、运算符以及Scanner类的应用。首先介绍了变量的概念与命名规范,以及如何定义和使用变量;接着详细讲解了Java中的基本数据类型,包括整型、浮点型、字符型、布尔型等,并通过实例演示了数据类型的运用。随后,深入探讨了各类运算符(赋值、算术、关系、逻辑)及其优先级,帮助理解表达式的构成。最后,介绍了如何利用Scanner类实现用户输入功能,并通过多个综合示例(如计算圆面积、购物打折、变量交换及银行利息计算)巩固所学知识。完成相关作业将进一步加深对这些基础概念的理解与实践能力。
141 13
|
存储 Java
Java学习笔记 List集合的定义、集合的遍历、迭代器的使用
Java学习笔记 List集合的定义、集合的遍历、迭代器的使用
306 4
|
8月前
|
开发框架 Java 开发工具
【Java全栈学习笔记-U1-day01】Java介绍
本笔记整理了Java学习的基础内容,涵盖程序理解、Java语言特性、JDK安装与配置、Java程序开发工具及编写步骤。重点介绍了Java程序的基本结构、编译和运行过程,以及输出语句的使用。通过实例演示了IDEA创建Java程序的方法,并强调了编码规范和注意事项。适合初学者复习和交流学习。 主要内容: 1. 理解程序:计算机组成、程序定义。 2. 简介:Java语言特点、技术平台、JDK作用。 3. 编写Java程序:编写、编译、运行步骤,基本结构。 4. 输出语句 5. DEA使用:新建工程、保存位置、文件介绍、新建类。 6. 扩展:注释、代码规范、大小写敏感、缩进等。
|
存储 安全 Java
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(基础篇)
从Java环境的搭建到实际代码的编写,从基本用法的讲解到底层原理的剖析,深度解析Java基础知识。本文是《Java学习路线》专栏的起始文章,旨在提供一套完整的Java学习路线,覆盖Java基础知识、数据库、SSM/SpringBoot等框架、Redis/MQ等中间件、设计模式、架构设计、性能调优、源码解读、核心面试题等全面的知识点,并在未来不断更新和完善,帮助Java从业者在更短的时间内成长为高级开发。
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(基础篇)
|
存储 安全 Java
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(进阶篇)
本文是Java基础的进阶篇,对异常、集合、泛型、Java8新特性、I/O流等知识进行深入浅出的介绍,并附有对应的代码示例,重要的地方带有对性能、底层原理、源码的剖析。适合Java初学者。
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(进阶篇)
|
12月前
|
Java 数据库连接 API
Spring 框架的介绍(Java EE 学习笔记02)
Spring是一个由Rod Johnson开发的轻量级Java SE/EE一站式开源框架,旨在解决Java EE应用中的多种问题。它采用非侵入式设计,通过IoC和AOP技术简化了Java应用的开发流程,降低了组件间的耦合度,支持事务管理和多种框架的无缝集成,极大提升了开发效率和代码质量。Spring 5引入了响应式编程等新特性,进一步增强了框架的功能性和灵活性。
210 0
|
SQL druid Java
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(下)
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)
176 3
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(下)
|
SQL Java 关系型数据库
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(上)
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)
574 3
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(上)