【Java】做了个 Java 简洁版身材计算

news2025/2/1 22:48:11

前言

(当前文章仅说明做了这个 身材计算 简洁版。)

为了参加比赛 码上掘金编程后端挑战赛 (juejin.cn)…
我选择了做一个简洁版的身材计算…

效果展示

person-java.gif

code - juejin

地址:身材计算(Java版) - 码上掘金

完整代码

import java.util.Scanner;

public class Main extends Common {
    public static void main(String[] args) {
        // 身体健康计算情况
        // 开始
        start();
        boolean flag = true;
        Person person = new Person();
        while (flag) {
            showRule();
            String inText = in();
            while (inText == null || inText == "") {
                show("输入错误,请检查是否有输入。");
                inText = in();
            }
            switch (inText) {
                case "0":
                    show("欢迎下次光临南方者小测!");
                    flag = false;
                    break;
                case "1":
                    person.inName(); // 输入名字(如:南方者)
                    person.inSex(); // 输入性别
                    person.inAge(); // 输入年龄
                    person.inHeight(); // 输入身高
                    person.inWeight(); // 输入体重
                    person.inBust(); // 输入胸围
                    person.inWaist(); // 输入腰围
                    person.inHip(); // 输入臀围
                    break;
                case "2": // 显示`BMI`计算公式
                    showBMI();
                    break;
                case "3": // 计算`BMI`值
                    person.countBMI();
                    break;
                case "4": // 显示`体脂率值`计算公式
                    showBF();
                    break;
                case "5": // 计算`体脂率值`
                    person.countBF();
                    break;
                case "6":
                    person.display();
                    break;
                default:
                    show("输入错误,请检查是否有输入。");
            }

        }
    }

    public static void start() {
        show("********************************");
        show("计算身体健康情况 - by nanfangzhe");
        show("---------------------------------");
        show("说明:");
        show("1. 输入的参数值越多,计算标准越多。");
        show("2. 根据提示进入下一步。");
        show("(注:仅靠简单数据计算出的结果,都有可能的误差在8%以内;请以医院医生数据为标准。)");
        show("---------------------------------");
    }

    /**
     * 显示规则
     */
    public static void showRule() {
        show("---------------------------------");
        show("输入提示:0 退出;1 输入/修改参数;2 显示`BMI`计算公式;\n     3计算`BMI`值;4 显示`体脂率值`计算公式;5 计算`体脂率值`;6 输出个人情况;");
        show("---------------------------------");
    }

    /**
     * 体脂率情况
     */
    public static void showBF() {
        show("********************************");
        show("计算体脂率:1.2×BMI+0.23×年龄-5.4-10.8×性别(男1,女0)");
        show("---------------------------------");
        show("丨 类型 丨   体脂率范围");
        show("丨  男  丨   15%~18%");
        show("丨  女  丨   20%~30%");
        show("---------------------------------");
    }

    /**
     * 三围
     */
    public static void show3Point() {
        show("********************************");
        show("标准三围计算");
        show("-----------------------------------");
        show("丨 类型 丨     男    丨       女       ");
        show("丨 胸围 丨 身高×0.61 丨 身高×0.61×0.9  ");
        show("丨 腰围 丨 身高×0.42 丨 身高×0.42×0.89 ");
        show("丨 臀围 丨 身高×0.64 丨 身高×0.64×1.02 ");
        show("-----------------------------------");
    }

    public static void showBMI() {
        show("********************************");
        show("BMI 中国标准(计算公式:BMI = 体重(kg)/ 身高的平方(m)");
        show("---------------------------------");
        show("丨 分类 丨   BMI 范围     ");
        show("丨 偏瘦 丨   <= 18.4     ");
        show("丨 正常 丨 18.5 ~ 23.9  ");
        show("丨 过重 丨 24.0 ~ 27.9   ");
        show("丨 肥胖 丨   >= 28.0     ");
        show("---------------------------------");
    }

}

/**
 * 对应用户的类
 */
class Person extends Common {
    static String notInputText = "(待输入)";
    String name = "你"; // 姓名 默认称呼 “你”
    int age; // 年龄
    int sex = -1; // 性别(1男 0女)
    float height; // 体重
    float weight; // 身高
    float bmi; // BMI值
    float bust; // 胸围
    float waist; // 腰围
    float hip; // 臀围
    float canonBust; // 标准胸围
    float canonWaist; // 标准腰围
    float canonHip; // 标准臀围
    float bf; // 体脂率
    String text = "暂无";


    public void inName() {
        show("输入姓名");
        this.name = in();
    }


    public void inAge() {
        show("输入年龄");
        String str = in();
        while (!isNumber(str)) {
            show("输入格式错误,请检查。(格式:整数;如:18岁,输入18(多余小数会自动去掉)");
            str = in();
        }
        try {
            float f = Float.parseFloat(str);
            this.age = (int) f;
        } catch (Exception e) {
            show("输入错误,请重试。");
            this.inAge();
        }
    }


    public void inSex() {
        show("输入性别(男1 女0 其他为跳过)");
        String str = in();
        while (!isNumber(str)) {
            show("输入格式错误,请检查。(格式:整数;男1 女0");
            str = in();
        }
        try {
            float f = Float.parseFloat(str);
            if (f == 0 || f == 1) {
                this.sex = (int) f;
            }
        } catch (Exception e) {
            show("输入错误,请重试。");
            this.inSex();
        }
    }


    public void inHeight() {
        show("输入身高(输入0为跳过)");
        String str = in();
        while (!isNumber(str)) {
            show("输入格式错误,请检查。(格式为:数字;例如身高184cm,输入184)");
            str = in();
        }
        try {
            if (isZero(str)) {
                // 0为跳过
                return;
            }
            this.height = Float.parseFloat(str);
        } catch (Exception e) {
            show("输入错误,请重试。");
            this.inHeight();
        }
    }


    public void inWeight() {
        show("输入体重(输入0为跳过)");
        String str = in();
        while (!isNumber(str)) {
            show("输入格式错误,请检查。(格式为:数字;例如体重90.2kg,输入90.2)");
            str = in();
        }
        try {
            if (isZero(str)) {
                // 0为跳过
                return;
            }
            this.weight = Float.parseFloat(str);
        } catch (Exception e) {
            show("输入错误,请重试。");
            this.inWeight();
        }
    }


    public void inBust() {
        show("输入胸围(输入0为跳过)");
        String str = in();
        while (!isNumber(str)) {
            show("输入格式错误,请检查。(格式为:数字;例如胸围37.5,输入37.5)");
            str = in();
        }
        try {
            if (isZero(str)) {
                return;
            }
            this.bust = Float.parseFloat(str);
        } catch (Exception e) {
            show("输入错误,请重试。");
            this.inBust();
        }
    }


    public void inWaist() {
        show("输入腰围(输入0为跳过)");
        String str = in();
        while (!isNumber(str)) {
            show("输入格式错误,请检查。(格式为:数字;例如腰围50.5,输入50.5)");
            str = in();
        }
        try {
            if (isZero(str)) {
                return;
            }
            this.waist = Float.parseFloat(str);
        } catch (Exception e) {
            this.inWaist();
            show("输入错误,请重试。");
        }
    }


    public void inHip() {
        show("输入臀围(输入0为跳过)");
        String str = in();
        while (!isNumber(str)) {
            show("输入格式错误,请检查。(格式为:数字;例如臀围50.5,输入50.5)");
            str = in();
        }
        try {
            if (isZero(str)) {
                return;
            }
            this.hip = Float.parseFloat(str);
        } catch (Exception e) {
            this.inHip();
            show("输入错误,请重试。");
        }
    }

    /**
     * 计算 BMI
     */
    public void countBMI() {
        if (this.weight == 0 || this.weight < 1 || this.height < 1) {
            show("请检查当前的身高和体重是否有值。(计算 BMI 失败!");
            return;
        }
        this.bmi = this.weight / (this.height * this.height) * 100 * 100;  // 身高是以米为单位(因此,乘上两个100)
        show("计算成功!你的BMI值为:" + this.bmi);
    }

    /**
     * 计算标准三围
     */
    public void count3Point() {
        if (this.height == 0 || this.height < 1 || (this.sex != 0 && this.sex != 1)) {
            show("请检查当前的身高和性别是否有值。(计算标准三围失败!");
            return;
        }
        this.canonBust = this.height * 0.61f;
        this.canonWaist = this.height * 0.42f;
        this.canonHip = this.height * 0.64f;

        // 如果是女性,需要乘上对应的参数
        if (this.sex == 0) {
            this.canonBust *= 0.9f;
            this.canonWaist *= 0.89f;
            this.canonHip *= 1.02f;
        }
    }

    /**
     * 计算体脂率
     */
    public void countBF() {
        if (this.bmi == 0 || this.age == 0 || (this.sex != 0 && this.sex != 1)) {
            show("请检查当前的身高、体重、年龄、性别是否有值。(计算 体脂率 失败!");
            return;
        }
        this.bf = this.bmi * 1.2f + 0.23f * this.age - 5.4f - 10.8f * this.sex;
        show("计算成功!你的体脂率值为:" + this.bf);
    }

    public void display() {
//        countBMI();
//        count3Point();
//        countBF();
        // 输出身体情况
        String ageStr = "" + (this.age == 0 ? notInputText : this.age);
        String sexStr = this.sex == -1 ? notInputText : (this.sex == 1 ? "男" : "女");
        String heightStr = this.height == 0 ? notInputText : (this.height + "cm");
        String weightStr = this.weight == 0 ? notInputText : (this.weight + "kg");
        String bmiStr = this.bmi == 0 ? notInputText : this.bmi + "";
        String bfStr = this.bf == 0 ? notInputText : this.bf + "";
        show(this.name + "的身体情况");
        show("---------------------------------");
        show("丨  类型  丨   值");
        show("---------------------------------");
        show("丨  年龄  丨   " + ageStr);
        show("丨  性别  丨   " + sexStr);
        show("丨  身高  丨   " + heightStr);
        show("丨  体重  丨   " + weightStr);
        show("丨  BMI   丨   " + bmiStr);
        show("丨  体脂率 丨   " + bfStr);
        show("丨  最终建议:  " + this.text);
        show("---------------------------------");
    }

    public boolean isNumber(String str) {
        String regex = "\\d+(.\\d+)?";
        return str.matches(regex);
    }

    public static boolean isZero(String str) {
        return Float.parseFloat(str) == 0;
    }
}

class Common {
    /**
     * 仅为了方便输出
     *
     * @param str
     */
    public static void show(String str) {
        System.out.println(str);
    }

    /**
     * 输入
     *
     * @return
     */
    public static String in() {
        Scanner scanner = new Scanner(System.in);
        String next = scanner.next();
        while (next == null || next.isEmpty() || next.trim().isEmpty()) {
            show("输入有误,请重新输入。");
            next = scanner.next();
        }
        return next;
    }
}

文章小尾巴

文章写作、模板、文章小尾巴可参考:《写作“小心思”》

  感谢你看到最后,最后再说两点~
  ①如果你持有不同的看法,欢迎你在文章下方进行留言、评论。
  ②如果对你有帮助,或者你认可的话,欢迎给个小点赞,支持一下~
   我是南方者,一个热爱计算机更热爱祖国的南方人。
  (文章内容仅供学习参考,如有侵权,非常抱歉,请立即联系作者删除。)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/104289.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RK3568平台开发系列讲解(环境篇)kernel编译及打包

🚀返回专栏总目录 文章目录 一、编译步骤二、编译脚本沉淀、分享、成长,让自己和他人都能有所收获!😄 📢此方法常用于 kernel 的开发和调试,以下的方法既编译 kernel 部分时, 同时打包成 boot.img, 这样加快了我们开发的速度; 一、编译步骤 进入内核目录下, 输入…

进阶中级前端必备知识点

1、从输入url到页面显示出来发生了什么 1.DNS解析 2.TCP连接 3.发送HTTP请求 4.服务器处理请求并返回需要的数据 5.浏览器解析渲染页面 解析HTML&#xff0c;生成DOM树&#xff0c;解析CSS&#xff0c;生成CSSOM树 将DOM树和CSSOM树结合&#xff0c;生成渲染树(Render T…

智能无障碍轮椅——DX-BT05 4.0蓝牙模块

文章目录常用的蓝牙模块有哪几种&#xff1f;蓝牙的透传蓝牙的运行模式开发方式AT指令集开发方式AT指令集BT-05调试硬件图DX-BT05 4.0蓝牙模块介绍连接步骤&#xff1a;常用的几个AT指令主模式的AT指令常用的蓝牙模块有哪几种&#xff1f; 蓝牙主要有HC-05、HC-06、BT-04、BT-…

SpringBoot整合mybatis实现增删改查、分页查询

前提&#xff1a; 先搭建出最基本的SpringBoot项目 SpringBoot框架快速入门搭建Hello World&#xff0c;请点击下面链接&#xff1a;https://blog.csdn.net/KangYouWei6/article/details/127018638 一、建立数据库 /*Navicat Premium Data TransferSource Server : 本地…

搜狗SEO优化技巧,搜狗收录批量查询技巧

搜狗SEO优化技巧 首先要知道搜索引擎的搜索原理&#xff0c;简而言之就是蜘蛛怎么爬取你的新网站&#xff0c;一般新的企业网站蜘蛛采取的是横向抓取&#xff0c;先收录首页&#xff0c;然后栏目页、子网页&#xff0c;这样一级一级的往下走&#xff0c;建网站用com域名。新…

设计测试用例的方法

设计测试用例的方法有很多&#xff0c;等价类划分法是重点&#xff0c;边界值分析法次之&#xff0c;对于因果图法知道概念就行&#xff0c;老师说考试不会考&#xff0c;但是历年考试中貌似考过一次&#xff0c;这就不知道了&#xff0c;反正考试大题基本课本例题&#xff0c;…

(十八)Vue之生命周期

文章目录引出生命周期外部的定时器实现生命周期实现生命周期详解挂载流程更新流程销毁流程总结Vue学习目录 上一篇&#xff1a;&#xff08;十七&#xff09;Vue之自定义指令 引出生命周期 先看一个需求&#xff1a;一上来就让一段文字的透明度循环从1-0-1的过程&#xff0c…

Fabric.js 文本自动换行的实现方式

本文简介 点赞 关注 收藏 学会了 在 fabric.js 提供的文本组件中&#xff0c;默认状态是不会自动换行。如果你的使用场景中需要自动文本自动换行&#xff0c;可以使用 Textbox &#xff0c;并将 splitByGrapheme 设置为 true 即可。 文本自动换行 如果需要实现本文自动换行…

盘点:保护企业数据安全的10种方法

即便是大型企业也无法防止网络攻击导致的数据泄露&#xff0c;但有多种保护数据安全的方法。 许多公司谨慎处理敏感信息&#xff0c;包括客户个人信息、企业财务记录和账户&#xff0c;以及企业暂时不想泄露的绝密项目&#xff0c;保持数据的安全至关重要。 全球知名企业发生了…

Java(十五)----Stream流

1 Stream流 1.1 Stream流的优势 Java8中有两大最为重要的改变。第一个是 Lambda 表达式&#xff1b;另外一个则是 Stream API。 Stream API ( java.util.stream) 把真正的函数式编程风格引入到Java中。这是目前为止对Java类库最好的补充&#xff0c;因为Stream API可以极大提…

11 深入了解InnoDB引擎

1. Innodb逻辑存储结构 表空间&#xff1a;ibd文件段segment&#xff1a;区extent&#xff1a;一个区大小为1m&#xff0c;里面有64个page页&#xff1b;为了保证页的连续性innodb会一次从磁盘申请4-5个区页page&#xff1a;一个page页大小为默认为16k行row&#xff1a;Trx id、…

深入探究Python上下文管理器

引子 上下文管理器是一种简化代码的有力方式&#xff0c;其内部也蕴含了很多Python的编程思想&#xff0c;今天我们就来探究一下Python的上下文管理器。 大家之前都知道&#xff0c;使用Python打开文件的时候最好要使用with语句&#xff0c;因为这样就算在文件操作中出现了异常…

基于java的校园共享自行车系统的设计与实现/校园共享单车管理系统

摘 要 伴随着社会以及科学技术的发展&#xff0c;互联网已经渗透在人们的身边&#xff0c;网络慢慢的变成了人们的生活必不可少的一部分&#xff0c;紧接着网络飞速的发展&#xff0c;管理系统这一名词已不陌生&#xff0c;越来越多的学校、公司等机构都会定制一款属于自己个…

React扩展:setState、lazyLoad、hook

目录 1.setState的两种写法 ①setState(对象,[callback])②setState(函数,[callback])函数可以接收到stata和props&#xff0c;callback回调函数能获取状态更新后的数据 写了个Demo组件 import React, { Component } from reactexport default class Demo extends Component…

万岳直播电商系统源码代码分析

以小编经验来看&#xff0c;传统商户领域的客流量受地区的限制&#xff0c;往往比较单一、固定&#xff0c;商家需压耗费大量的时间进行打造IP&#xff0c;而电商直播系统的出现则完全打破了这一规则&#xff0c;商家可以通过直播的形式&#xff0c;轻松获取源源不断的客流量&a…

网络中的一些基本概念(总结)

目录 1.IP地址 2.端口号 3.协议 4.五元组 5.协议分层 1.OSI七层模型 2.TCP/IP五层(四层)模型 6.网络分层对应 7.封装 8.分用 9.客户端和服务器 1.IP地址 IP地址是用来定位主机的网络地址,主要用于标识主机和一些其他的网络设备,比如路由器通常是用点分十进制来表示的]…

节律失调:Theta-Gamma耦合精度改变损害老年人的联想记忆

根据著名的神经通信理论&#xff0c;振荡活动的精确协调能够形成联想记忆。我们认为&#xff0c;正常的认知老化会损害神经通信的时间精确性&#xff0c;从而损害联想记忆的形成。我们发现&#xff0c;在年轻人和老年人中都存在高频gamma功率与低频theta相位的耦合支持联想记忆…

地下水监测系统介绍 地下水水位在线监测系统解决方案及应用

平升电子地下水监测系统/地下水水位在线监测系统解决方案由地下水自动监测站监测设备和监测中心平台软件组成。监测设备自动采集、存储地下水水位、水温、水量、水质数据&#xff0c;通过4G/NB-IoT/北斗无线通信网络定时上报至省/市/县级监测中心平台&#xff0c;平台自动接收和…

神奇的 Excel 插件:Azure DevOps 插件

我想离开测试部分,与您分享一个插件,我发现它在我作为业务分析师的商业生活中非常有用。如果您与 Azure DevOps Board 擦肩而过,本文适合您:) 本周,我将与您分享一个我用来跟踪在 Azure DevOps 中完成的工作的插件。 在解释它的安装和使用之前,我想分享一下为什么我需要…

【Lilishop商城】No3-11.模块详细设计,促销模块(优惠券、满减、秒杀、积分)的详细设计

仅涉及后端&#xff0c;全部目录看顶部专栏&#xff0c;代码、文档、接口路径在&#xff1a; 【Lilishop商城】记录一下B2B2C商城系统学习笔记~_清晨敲代码的博客-CSDN博客 全篇会结合业务介绍重点设计逻辑&#xff0c;其中重点包括接口类、业务类&#xff0c;具体的结合源代…