Java 学习笔记 —— BMI & BMR 计算器
一、项目背景
今天练习了一个小程序,使用 Java 输入用户的年龄、性别、身高、体重,计算并输出:
- BMI(Body Mass Index,身体质量指数)
- BMR(Basal Metabolic Rate,基础代谢率)
这个小项目帮助我理解了:
- Scanner 的使用(输入数据)
- 循环与输入验证
- 条件判断 if-else
- 数学公式的实现
- 格式化输出
二、程序源码
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
五、学习收获
- 学会了 输入验证,防止用户输入非法数据。
- 理解了 BMI 和 BMR 的计算公式,能用 Java 实现。
- 掌握了 格式化输出,控制小数位数。
- 巩固了 条件判断与循环 的实际应用。
📌 以后可以扩展的功能:
- 根据 BMR 计算每日所需总热量(结合活动系数)。
- 根据 BMI & BMR 给出健康建议。
- 把输入输出做成 图形界面(Swing/JavaFX)。