首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >BMI计算器/评估器

BMI计算器/评估器
EN

Code Review用户
提问于 2018-06-29 16:32:25
回答 1查看 1.3K关注 0票数 1

我刚开始使用Java。下面的代码计算身体质量指数(BMI)。

有人能找我的代码并评估一下吗?也许我该多写点什么?所有的建议都会很有帮助。

代码语言:javascript
运行
复制
import java.util.Scanner;

public class BMI {

    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        double weight = 0;
        double height = 0;
        double bmi = 0;

        System.out.println("Please enter your details to calculate your Body Mass Index.");

        System.out.println("Enter your weight in kilograms:");
        weight = scanner.nextDouble();
        System.out.println("Enter your height in metres:");
        height = scanner.nextDouble();
        bmi = (weight / (height * height));
        System.out.println("Your BMI is: " + bmi);

        if (bmi >= 40) {
            System.out.println("Serious obesity");
        } else if (bmi >= 30) {
            System.out.println("Obesity");
        } else if (bmi >= 25) {
            System.out.println("Overweight");
        } else if (bmi >= 18) {
            System.out.println("Standard");
        } else {
            System.out.println("Underweight");
        }

        scanner.close();

    }

}
EN

回答 1

Code Review用户

发布于 2018-06-29 19:27:03

对于初学者来说,这还不错,我同意本·阿伦森的评论。也许不是现在,但当你进步的时候,你应该改变一些事情:

  • 将代码划分为逻辑部分(这里是:方法),每个部分应该只有一个任务(单一责任原则)。在应用程序中,获取数据是一项任务,计算是一项任务,显示结果是一项任务。
  • 错误处理(见Ben的回答)
  • 测试!学习编写JUnit测试!它将“自动”引导到更好的代码,这不仅是因为您避免了编程错误,而且还因为您学会了分解代码以使其可测试。
  • 使您的代码既可伸缩,又适用于不同的场景。例如,if-cascade很容易编写和理解,但它不缩放(如果您需要20种情况怎么办?),而且它是不自由适用的(例如,您不能传递它,ifs基本上是“粘合”的地方)。

虽然对于初学者来说,这可能有点太高级了:关于最后一点,我想向您展示一个技巧,甚至一些高级程序员也不知道:

代码语言:javascript
运行
复制
import java.util.Scanner;
import java.util.TreeMap;

public class BMI {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("Please enter your details to calculate your Body Mass Index.");
        System.out.println("Enter your weight in kilograms:");
        double weight = scanner.nextDouble();
        System.out.println("Enter your height in metres:");
        double height = scanner.nextDouble();
        scanner.close();
        double bmi = weight / (height * height);
        System.out.println("Your BMI is: " + bmi);

        TreeMap<Double, String> map = new TreeMap<>();
        map.put(40.0, "Serious obesity");
        map.put(30.0, "Obesity");
        map.put(25.0, "Overweight");
        map.put(18.0, "Standard");
        map.put(0.0, "Underweight");

        System.out.println(map.floorEntry(bmi).getValue());
    }
}

有一个数据结构可以为您完成所有的if-checks,这使得代码编写简单、可伸缩,并且易于应用:TreeMap

Map只是一种字典,你可以在给定的键下找到“东西”。在TreeMap中,对密钥进行排序。在Java的TreeMap中,您不仅可以要求键,还可以要求键之间的值,键之间的值会被舍入(上限.)或往下(地板.)到地图上的下一个键。

票数 5
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/197501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档