引言

顺序结构只能顺序执行,不能进行判断和选择,因此需要分支结构。

Java 有两种分支结构:

  • if 语句

  • switch 语句

if 语句

一个 if 语句包含一个布尔表达式和一条或多条语句。

语法

If 语句的用语法如下:

if(布尔表达式)
{
   //如果布尔表达式为true将执行的语句
}

如果布尔表达式的值为 true,则执行 if 语句中的代码块。否则执行 If 语句块后面的代码。

public class Test {

   public static void main(String args[]){
      int x = 10;

      if( x < 20 ){
          System.out.print("这是 if 语句"); 
      }
   }
} 

以上代码编译运行结果如下:

这是 if 语句

if...else 语句

if 语句后面可以跟 else 语句,当 if 语句的布尔表达式值为 false 时,else 语句块会被执行。

语法

if…else 的用法如下:

if(布尔表达式){
   //如果布尔表达式的值为true
}else{
   //如果布尔表达式的值为false
}

实例

public class Test {

   public static void main(String args[]){
      int x = 30;

      if( x < 20 ){
          System.out.print("这是 if 语句");
       }else{
          System.out.print("这是 else 语句");
       }
   }
} 

以上代码编译运行结果如下:

这是 else 语句

if...else if...else 语句

if 语句后面可以跟 else if…else 语句,这种语句可以检测到多种可能的情况。

使用 if,else if,else 语句的时候,需要注意下面几点:

  • if 语句至多有 1 个 else 语句,else 语句在所有的 else if 语句之后。

  • If 语句可以有若干个 else if 语句,它们必须在 else 语句之前。

  • 一旦其中一个 else if 语句检测为 true,其他的 else if 以及 else 语句都将跳过执行。

语法

if...else 语法格式如下:

if(布尔表达式 1){
   //如果布尔表达式 1的值为true执行代码
}else if(布尔表达式 2){
   //如果布尔表达式 2的值为true执行代码
}else if(布尔表达式 3){
   //如果布尔表达式 3的值为true执行代码
}else {
   //如果以上布尔表达式都不为true执行代码
}

实例

public class Test {

   public static void main(String args[]){
      int x = 30;

      if( x == 10 ){
         System.out.print("Value of X is 10");
      }else if( x == 20 ){
         System.out.print("Value of X is 20");
      }else if( x == 30 ){
         System.out.print("Value of X is 30");
      }else{
         System.out.print("这是 else 语句");
      }
   }
}

以上代码编译运行结果如下:

Value of X is 30

嵌套的 if…else 语句

使用嵌套的 if-else 语句是合法的。也就是说你可以在另一个 if 或者 else if 语句中使用 if 或者 else if 语句。

语法

嵌套的 if…else 语法格式如下:

if(布尔表达式 1){
   ////如果布尔表达式 1的值为true执行代码
   if(布尔表达式 2){
      ////如果布尔表达式 2的值为true执行代码
   }
}

你可以像 if 语句一样嵌套 else if...else。

实例

public class Test {

   public static void main(String args[]){
      int x = 30;
      int y = 10;

      if( x == 30 ){
         if( y == 10 ){
             System.out.print("X = 30 and Y = 10");
          }
       }
    }
}

以上代码编译运行结果如下:

X = 30 and Y = 10

switch 语句

switch 语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支。

语法

switch 语法格式如下:

switch(expression){
    case value :
       //语句
       break; //可选
    case value :
       //语句
       break; //可选
    //你可以有任意数量的case语句
    default : //可选
       //语句
}

switch 语句有如下规则:

  • switch 语句中的变量类型只能为 byte、short、int 或者 char。从 Java SE 7 开始,switch 支持字符串 String 类型了,同时 case 标签必须为字符串常量或字面量。

  • switch 语句可以拥有多个 case 语句。每个 case 后面跟一个要比较的值和冒号。

  • case 语句中的值的数据类型必须与变量的数据类型相同,而且只能是常量或者字面常量。

  • 当变量的值与 case 语句的值相等时,那么 case 语句之后的语句开始执行,直到 break 语句出现才会跳出 switch 语句。

  • 当遇到 break 语句时,switch 语句终止。程序跳转到 switch 语句后面的语句执行。case 语句不必须要包含 break 语句。如果没有 break 语句出现,程序会继续执行下一条 case 语句,直到出现 break 语句。

  • switch 语句可以包含一个 default 分支,该分支必须是 switch 语句的最后一个分支。default 在没有 case 语句的值和变量值相等的时候执行。default 分支不需要 break 语句。

实例

public class Test {

   public static void main(String args[]){
      //char grade = args[0].charAt(0);
      char grade = 'C';

      switch(grade)
      {
         case 'A' :
            System.out.println("优秀"); 
            break;
         case 'B' :
         case 'C' :
            System.out.println("良好");
            break;
         case 'D' :
            System.out.println("及格");
         case 'F' :
            System.out.println("你需要继续努力");
            break;
         default :
            System.out.println("无效等级");
      }
      System.out.println("你的等级是 " + grade);
   }
}

以上代码编译运行结果如下:

良好
你的等级是 C

练习作业

题目一

判断成绩等级

编写一个 Java 程序,使用 if 分支语句判断给定分数对应的等级。

要求:

  • 提示用户输入一个整数分数。

  • 根据以下规则判断分数等级:

    • 分数在 90 及以上,等级为 A。

    • 分数在 80 到 89 之间(包含 80 和 89),等级为 B。

    • 分数在 70 到 79 之间(包含 70 和 79),等级为 C。

    • 分数在 60 到 69 之间(包含 60 和 69),等级为 D。

    • 分数低于 60,等级为 F。

  • 输出判断结果。

示例输出:

请输入分数: 85
分数等级为: B

提示:

  • 可以使用 java.util.Scanner 类获取用户的输入。

  • 可以使用 if-else if-else 结构来判断分数的范围并输出对应的等级。

题目二

判断奖学金等级

编写一个 Java 程序,使用嵌套的 if...else 分支语句判断学生获得的奖学金等级。

要求:

  • 提示用户输入一个整数表示学生的成绩。

  • 提示用户输入一个整数表示学生的出勤率(百分比)。

  • 根据以下规则判断奖学金等级:

    • 成绩在 90 及以上,且出勤率在 80 及以上,等级为 A。

    • 成绩在 80 到 89 之间(包含 80 和 89),且出勤率在 70 及以上,等级为 B。

    • 成绩在 70 到 79 之间(包含 70 和 79),且出勤率在 60 及以上,等级为 C。

    • 其他情况下,等级为 D。

  • 输出判断结果。

示例输出:

请输入学生的成绩: 85
请输入学生的出勤率(百分比): 75
奖学金等级为: B

提示:

  • 可以使用 java.util.Scanner 类获取用户的输入。

  • 可以使用嵌套的 if...else 结构来判断成绩和出勤率的范围,并输出对应的奖学金等级。

题目三

判断星期几

编写一个 Java 程序,使用嵌套的 switch 分支语句判断给定数字对应的星期几。

要求:

  • 提示用户输入一个整数表示星期几的数字(1 表示星期一,2 表示星期二,以此类推)。

  • 使用嵌套的 switch 分支语句判断数字对应的星期几,并输出结果。

  • 若输入的数字不在 1 到 7 的范围内,则输出错误提示信息。

示例输出:

请输入一个数字(1-7): 3
星期三

提示:

  • 可以使用 java.util.Scanner 类获取用户的输入。

  • 可以使用嵌套的 switch 分支语句来判断给定数字对应的星期几。

参考答案

题目一

import java.util.Scanner;

public class GradeChecker {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.print("请输入分数: ");
        int score = scanner.nextInt();

        String grade;

        if (score >= 90) {
            grade = "A";
        } else if (score >= 80) {
            grade = "B";
        } else if (score >= 70) {
            grade = "C";
        } else if (score >= 60) {
            grade = "D";
        } else {
            grade = "F";
        }

        System.out.println("分数等级为: " + grade);

        scanner.close();
    }
}

这段代码根据用户输入的分数,使用 if 分支语句判断并输出对应的等级。首先,我们使用 java.util.Scanner 类获取用户输入的分数。然后,根据给定的规则使用 if-else if-else 结构判断分数的范围并将对应的等级赋值给 grade 变量。最后,输出判断结果。

题目二

import java.util.Scanner;

public class ScholarshipChecker {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.print("请输入学生的成绩: ");
        int score = scanner.nextInt();

        System.out.print("请输入学生的出勤率(百分比): ");
        int attendance = scanner.nextInt();

        String scholarship;

        if (score >= 90) {
            if (attendance >= 80) {
                scholarship = "A";
            } else {
                scholarship = "无奖学金";
            }
        } else if (score >= 80) {
            if (attendance >= 70) {
                scholarship = "B";
            } else {
                scholarship = "无奖学金";
            }
        } else if (score >= 70) {
            if (attendance >= 60) {
                scholarship = "C";
            } else {
                scholarship = "无奖学金";
            }
        } else {
            scholarship = "D";
        }

        System.out.println("奖学金等级为: " + scholarship);

        scanner.close();
    }
}

这段代码根据用户输入的学生成绩和出勤率,使用嵌套的 if...else 分支语句判断并输出对应的奖学金等级。首先,我们使用 java.util.Scanner 类获取用户输入的成绩和出勤率。然后,根据给定的规则使用嵌套的 if...else 结构判断成绩和出勤率的范围,并将对应的奖学金等级赋值给 scholarship 变量。最后,输出判断结果。

题目三

import java.util.Scanner;

public class WeekdayChecker {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.print("请输入一个数字(1-7): ");
        int dayNumber = scanner.nextInt();

        String day;

        switch (dayNumber) {
            case 1:
                day = "星期一";
                break;
            case 2:
                day = "星期二";
                break;
            case 3:
                day = "星期三";
                break;
            case 4:
                day = "星期四";
                break;
            case 5:
                day = "星期五";
                break;
            case 6:
                day = "星期六";
                break;
            case 7:
                day = "星期日";
                break;
            default:
                day = "错误:请输入有效的数字(1-7)";
                break;
        }

        System.out.println(day);

        scanner.close();
    }
}

这段代码根据用户输入的数字,使用嵌套的 switch 分支语句判断并输出对应的星期几。首先,我们使用 java.util.Scanner 类获取用户输入的数字。然后,使用嵌套的 switch 分支语句根据给定数字的不同情况分别赋值给 day 变量。最后,输出结果。