条件分支控制一般有 2 种:if-else条件分支和switch选择分支。

1. if-else条件分支

一般情况下,基于if-else的条件分支也有 3 种形式,分别为单分支双分支以及多分支

1.1 单分支

如果我们只有一个if条件判断,这样的流程控制称为单分支的条件控制。

  1. public class SingleConditionBranchControl {
  2. public static void main(String[] args) {
  3. int num = 10;
  4. if (num > 5) {
  5. System.out.println("This is single branch condition control!");
  6. }
  7. }
  8. }

1.2 双分支

如果使用if...else...这样的条件判断,这样的流程控制称为双分支的条件控制。

  1. public class DoubleBranchControl {
  2. public static void main(String[] args) {
  3. int num = 10;
  4. if (num > 5) {
  5. System.out.println("This is first branch control");
  6. } else {
  7. System.out.println("This is second branch control");
  8. }
  9. }
  10. }

1.3 多分支

如果使用if...else if...else这样的条件判断,这样的流程控制称为多分支的条件控制。

  1. public class MultiBranchControl {
  2. public static void main(String[] args) {
  3. int num = 10;
  4. if (num > 8) {
  5. System.out.println("This is first branch control");
  6. } else if (num > 5) {
  7. System.out.println("This is second branch control");
  8. } else {
  9. System.out.println("This is third branch control");
  10. }
  11. }
  12. }

1.4 嵌套分支

当然,我们还可以在分支中继续嵌套分支,所嵌套的分支可以是单分支、双分支、多分支其中的一种或多种。

  1. public class NestBranchControl {
  2. public static void main(String[] args) {
  3. int age = 18;
  4. float height = 1.75f;
  5. if (age > 18) {
  6. System.out.println("You are less than 18 years old!");
  7. } else {
  8. if (height < 1.2) {
  9. System.out.println("Your are too short!");
  10. } else if (height > 1.8) {
  11. System.out.println("Your are strong!");
  12. } else {
  13. System.out.println("You grow healthily!");
  14. }
  15. }
  16. }
  17. }

1.5 练习

接下来,我们做一个小练习,根据用户输入的身高和体重,算出该用户的 BMI 值。如果所计算的 BMI 与标准严重不符合,需警告用户注意身体。

  1. import java.util.Scanner;
  2. public class CalculateBMI {
  3. public static void main(String[] args) {
  4. Scanner scanner = new Scanner(System.in);
  5. System.out.print("Input your height: ");
  6. float height = scanner.nextFloat();
  7. System.out.print("Input your weight: ");
  8. float weight = scanner.nextFloat();
  9. double bmi = (weight / Math.pow(height, 2));
  10. System.out.println("BMI Standard Range: 18.5 ~ 23.9");
  11. System.out.println("Your BMI Value is " + bmi + "\n");
  12. if (bmi < 18.5) {
  13. System.out.println("You are too thin, and need to be more stronger!");
  14. } else if (bmi > 23.9) {
  15. System.out.println("You are too fat, and need to reduce your weight!");
  16. } else {
  17. System.out.println("Your are very healthy!");
  18. }
  19. }
  20. }

上面高亮的代码部分,用来定义一个Scanner等待用户输入,这个和 Python 种input非常类似。

2. switch多分支

另一种条件分支就是switch选择分支,其实能用switch实现的分支逻辑都可以用if-else来实现,只不过有些情况下,switch选择分支的代码会更间接一些。

另外值得一提的是,switch分支是基于值的分支,并不能做比较判断:

  1. public class SwitchBranchControl {
  2. public static void main(String[] args) {
  3. String fruit = "apple";
  4. switch (fruit) {
  5. case "apple":
  6. System.out.println("This is an apple!");
  7. break;
  8. case "banana":
  9. System.out.println("This is a banana!");
  10. break;
  11. default:
  12. System.out.println("This is a fruit?");
  13. }
  14. }
  15. }

其中default分支表示前面的分支都没有击中的情况下,则会击中该分支。当然,default分支也可以选择不添加。