「Java流程控制」选择结构的综合应用

53 阅读5分钟

知识点解析

选择结构是Java中控制程序执行流程的重要手段,它允许程序根据特定条件执行不同的代码块。Java中的选择结构主要包括if语句、if-else语句、if-else if-else语句以及switch语句。

  • if语句:当条件为真时执行代码块。
  • if-else语句:当条件为真时执行一个代码块,否则执行另一个代码块。
  • if-else if-else语句:处理多个条件分支,根据第一个为真的条件执行对应的代码块。
  • switch语句:根据表达式的值,从多个代码块中选择一个执行。

案例源代码及解析

案例:使用if-else判断成绩等级

public class GradeEvaluation {
    public static void main(String[] args) {
        int score = 85;
        if (score >= 90) {
            System.out.println("优秀");
        } else if (score >= 80) {
            System.out.println("良好");
        } else if (score >= 60) {
            System.out.println("及格");
        } else {
            System.out.println("不及格");
        }
    }
}

运行结果

良好

代码解析

  • Java源文件保存为“GradeEvaluation.java”。
  • 根据分数score的值,使用if-else if-else结构判断并输出成绩等级。首先检查分数是否大于等于90,如果是,输出“优秀”;否则检查是否大于等于80,输出“良好”;以此类推,直到最后一个else输出“不及格”。

案例:使用switch判断星期几

public class DayOfWeek {
    public static void main(String[] args) {
        int day = 3;
        switch (day) {
            case 1:
                System.out.println("星期一");
                break;
            case 2:
                System.out.println("星期二");
                break;
            case 3:
                System.out.println("星期三");
                break;
            case 4:
                System.out.println("星期四");
                break;
            case 5:
                System.out.println("星期五");
                break;
            case 6:
                System.out.println("星期六");
                break;
            case 7:
                System.out.println("星期日");
                break;
            default:
                System.out.println("无效的输入");
        }
    }
}

运行结果

星期三

代码解析

  • Java源文件保存为“DayOfWeek.java”。
  • 根据变量day的值,使用switch语句输出对应的星期几。break语句用于退出switch块,default处理无效输入。例如,当day为3时,输出“星期三”。

案例:使用switch处理字符串

public class StringSwitch {
    public static void main(String[] args) {
        String fruit = "apple";
        switch (fruit) {
            case "apple":
                System.out.println("苹果");
                break;
            case "banana":
                System.out.println("香蕉");
                break;
            case "orange":
                System.out.println("橙子");
                break;
            default:
                System.out.println("未知水果");
        }
    }
}

运行结果

苹果

代码解析

  • Java源文件保存为“StringSwitch.java”。
  • 从Java 7开始,switch语句支持字符串类型。根据变量fruit的值,输出对应的中文名称。例如,当fruit为"apple"时,输出“苹果”。

常见错误及解决方法

  • 忘记break语句:在switch语句中,如果忘记break,程序会继续执行下一个case,导致逻辑错误。解决方法是确保每个case后都有break(除非故意利用fall-through特性)。

  • 条件表达式错误:在ifswitch语句中,条件表达式可能因逻辑错误或类型不匹配导致编译错误或运行时错误。解决方法是仔细检查条件表达式,确保逻辑正确且类型匹配。

  • 变量作用域问题:在ifswitch语句块内定义的变量,在块外不可见。解决方法是确保在需要使用变量的地方,变量已正确定义且在作用域内。

理论练习与实操练习

理论练习

简答题:简述if-else if-else语句与switch语句的区别。 答案if-else if-else语句用于处理多个条件分支,每个条件可以是一个复杂的布尔表达式;而switch语句用于基于一个表达式的值从多个代码块中选择一个执行,表达式通常是整数、字符或枚举类型。

简答题:在switch语句中,default的作用是什么? 答案defaultswitch语句中用于处理所有case都不匹配的情况,相当于一个默认分支。

简答题:为什么在switch语句中需要使用break答案:在switch语句中,break用于退出当前case,防止程序继续执行下一个case(即fall-through)。如果没有break,程序会继续执行下一个case的代码块。

实操练习

练习:编写一个程序,输入一个年份,判断该年份是否为闰年。 答案示例

import java.util.Scanner;

public class LeapYear {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入年份:");
        int year = scanner.nextInt();
        if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
            System.out.println(year + "年是闰年");
        } else {
            System.out.println(year + "年不是闰年");
        }
    }
}

运行结果

请输入年份:2024
2024年是闰年

说明:Java源文件保存为“LeapYear.java”。

练习:编写一个程序,输入一个成绩(0-100),输出对应的等级(A、B、C、D、E)。 答案示例

import java.util.Scanner;

public class Grade {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入成绩(0-100):");
        int score = scanner.nextInt();
        if (score >= 90) {
            System.out.println("A");
        } else if (score >= 80) {
            System.out.println("B");
        } else if (score >= 70) {
            System.out.println("C");
        } else if (score >= 60) {
            System.out.println("D");
        } else {
            System.out.println("E");
        }
    }
}

运行结果

请输入成绩(0-100):84
B

说明:Java源文件保存为“Grade.java”。

练习:编写一个程序,使用switch语句判断一个字符是否为元音字母(a、e、i、o、u)。 答案示例

import java.util.Scanner;

public class VowelCheck {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入一个字符:");
        char ch = scanner.next().charAt(0);
        switch (Character.toLowerCase(ch)) {
            case 'a':
            case 'e':
            case 'i':
            case 'o':
            case 'u':
                System.out.println(ch + "是元音字母");
                break;
            default:
                System.out.println(ch + "不是元音字母");
        }
    }
}

运行结果

请输入一个字符:E
E是元音字母

说明:Java源文件保存为“VowelCheck.java”。

知识总结

  • 选择结构是Java中控制程序执行流程的关键,包括ifif-elseif-else if-elseswitch语句。
  • if语句用于单条件判断,if-else用于二选一,if-else if-else用于多条件分支,switch用于基于表达式的多分支选择。
  • 使用switch时,注意break语句的使用,避免逻辑错误。
  • 确保条件表达式正确且类型匹配,避免编译错误或运行时错误。