我刚开始使用Java。下面的代码计算身体质量指数(BMI)。
有人能找我的代码并评估一下吗?也许我该多写点什么?所有的建议都会很有帮助。
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();
}
}发布于 2018-06-29 19:27:03
对于初学者来说,这还不错,我同意本·阿伦森的评论。也许不是现在,但当你进步的时候,你应该改变一些事情:
if-cascade很容易编写和理解,但它不缩放(如果您需要20种情况怎么办?),而且它是不自由适用的(例如,您不能传递它,ifs基本上是“粘合”的地方)。虽然对于初学者来说,这可能有点太高级了:关于最后一点,我想向您展示一个技巧,甚至一些高级程序员也不知道:
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中,您不仅可以要求键,还可以要求键之间的值,键之间的值会被舍入(上限.)或往下(地板.)到地图上的下一个键。
https://codereview.stackexchange.com/questions/197501
复制相似问题