条件结构

  • 前言
  • 一、if 条件结构
  • 1.1 if语句
  • 1.2 if-else语句
  • 1.3 多条件 if-else if-else语句
  • 1.4 嵌套 if 的使用
  • 二、switch 条件结构
  • 2.1 switch 语句
  • 2.2 switch-case-break-default关键字详解
  • 三、if 语句和 switch 语句的区别


前言

    条件结构(也叫选择结构/分支结构)解决了顺序结构不能判断的缺点,可以根据一个条件判断执行哪些语句块。选择结构适合于带有逻辑或关系比较等条件判断的计算。例如,判断是否到下班时间,判断两个数的大小等。Java 支持两种选择语句:if 语句和 switch 语句。其中 if 语句使用布尔表达式或布尔值作为分支条件来进行分支控制,而 switch 语句则用于对多个整型值进行匹配,从而实现分支控制。

一、if 条件结构

1.1 if语句

语法:

if (条件表达式) {
    语句块;
}

if 条件语句的运行流程如图 1-1 所示。

java 同时满足 java两个条件都成立_算法


图1-1 if 语句执行流程

案例: 编写一个 Java 程序,允许用户从键盘输入一个数字,再判断该数是否大于 100。使用 if 语句的实现代码如下:

public static void main(String[] args) {
    System.out.println("请输入一个数字:");
    Scanner input = new Scanner(System.in);
    int num = input.nextInt(); // 接收键盘输入数据
    // 判断用户输入的数据是否大于100
    if (num > 100) {
        System.out.println("输入的数字大于100");
    }
    // 判断用户输入的数据是否等于100
    if (num == 100) {
        System.out.println("输入的数字等于100");
    }
    // 判断用户输入的数据是否小于100
    if (num < 100) {
        System.out.println("输入的数字小于100");
    }
}

1.2 if-else语句

语法:

if (表达式) {
    语句块1;
} else {
    语句块2;
}

在上述语法格式中,如果 if 关键字后面的表达式成立,那么就执行语句块 1,否则的话则执行语句块 2,其运行流程如图 1-2 所示。

java 同时满足 java两个条件都成立_java 同时满足_02


图1-2 if-else 语句执行流程

案例: 假设有 num1 和 num2 两个变量,它们的值分别是 50 和 34。下面编写程序,要求使用 if 语句判断 num1 和 num2 的大小关系,并输出比较结果。

public static void main(String[] args) {
    int num1 = 50;
    int num2 = 34;
    // 如果num1等于num2
    if (num1 == num2) {
        System.out.println("num1等于num2");
    }
    // 如果num1大于num2
    if (num1 > num2) {
        System.out.println("num1大于num2");
    } else {
        // 否则就是num1小于num2
        System.out.println("num1小于num2");
    }
}

1.3 多条件 if-else if-else语句

语法:

if(表达式1) {
    语句块1;
} else if(表达式2) {
    语句块2;
...
} else if(表达式n) {
    语句块n;
} else {
    语句块n+1;
}

在使用 if-else if-else语句时,依次判断表达式的值,当某个分支的条件表达式的值为 true 时,则执行该分支对应的语句块,然后跳到整个 if 语句之外继续执行程序。如果所有的表达式均为 false,则执行语句块 n+1,然后继续执行后续程序,其运行流程如图 1-3 所示。

java 同时满足 java两个条件都成立_System_03


图1-3 if-else if-else语句执行流程

案例: 假设某学校对成绩的判断标准是:不低于 90,可以评为优秀;低于 90 但不低于 80,可以评为良好;低于 80 但不低于 60,可以评为中等;否则评为差。

public static void main(String[] args) {
    System.out.println("请输入考试成绩:");
    Scanner input = new Scanner(System.in);
    int score = input.nextInt(); // 接收键盘输入数据
    if (score >= 90) { // 考试成绩>=90
        System.out.println("优秀");
    } else if (score >= 80) { // 90>考试成绩>=80
        System.out.println("良好");
    } else if (score >= 60) { // 80>考试成绩>=60
        System.out.println("中等");
    } else { // 考试成绩<60
        System.out.println("差");
    }
}

1.4 嵌套 if 的使用

if 语句的用法非常灵活,不仅可以单独使用,还可以在 if 语句里嵌套另一个 if 语句。同样,if…else 语句和 if…else if 语句中也可以嵌套另一个 if 结构的语句,以完成更深层次的判断。嵌套 if 的的执行流程如图 1-4 所示。

java 同时满足 java两个条件都成立_System_04


图1-4 嵌套 if 语句执行流程 **案例:** 活动计划安排,如果今天是工作日,去上班;如果今天是周末,则出去游玩;同时,如果周末天气晴朗,去室外游乐场游玩,否则去室内游乐场游玩。

public static void main(String[] args) {
    String today = "周末";
    String weather = "晴朗";
    if (today.equals("周末")) {
        if (weather.equals("晴朗")) {
            System.out.println("去室外游乐场游玩");
        } else {
            System.out.println("去室内游乐场游玩");
        }
    } else {
        System.out.println("去上班");
    }
}

二、switch 条件结构

2.1 switch 语句

语法:

switch(表达式) {
    case 值1:
        语句块1;
        break;
    case 值2:
        语句块2;
        break;
    …
    case 值n:
        语句块n;
        break;
    default:
        语句块n+1;
    break;
}

java 同时满足 java两个条件都成立_算法_05


图 2-1 switch语句执行流程图

案例: 在节目的抽奖环节里,节目组会根据每位嘉宾的座位号来进行抽奖游戏,根据不同的号码来决定奖项的大小。要求使用 switch 语句编写 Java 程序来完成奖项分配。

public static void main(String[] args) {
    System.out.println("请输入座位号码:");
    Scanner sc = new Scanner(System.in);
    int num = sc.nextInt();
    switch (num) {
    case 8:
        System.out.println("恭喜你,获得了三等奖!");
        break;
    case 88:
        System.out.println("恭喜你,获得了二等奖!");
        break;
    case 888:
        System.out.println("恭喜你,获得了一等奖!");
        break;
    default:
        System.out.println("谢谢参与!");
        break;
    }
}

2.2 switch-case-break-default关键字详解

  • switch
    表示“开关”,这个开关就是 switch 关键字后面小括号里的值,小括号里要放一个整型变量或字符型变量。表达式必须为 byte,short,int,char类型。Java7 增强了 switch 语句的功能,允许 switch 语句的控制表达式是 java.lang.String 类型的变量或表达式。只能是 java.lang.String 类型,不能是 StringBuffer 或 StringBuilder 这两种字符串的类型。
  • case
    表示“情况,情形”,case 标签类型可以是 char、byte、 short 或 int 的常量表达式、枚举常量。从 Java SE 7 开始, case 标签还可以是字符串字面量。
  • default
    表示“默认”, 即其他情况都不满足。default 后要紧跟冒号,default 块和 case 块的先后顺序可以变动,不会影响程序执行结果。(这句话博大精深)通常,default 块放在末尾,也可以省略不写。
  • break
    表示“停止”,即跳出当前结构。如果在 case 分支语句的末尾没有 break 语句,有可能触发多个 case 分支,那么就会接着执行下一个 case 分支语句。这种情况相当危险,常常会引发错误。为此,我们在程序中很少使用 switch 语句。

例题:
下列语句执行的结果为_______

switch(5){
	default:
        	System.out.print(5);
	case 0:
        	System.out.print(0);
   case 1:
        	System.out.print(1);
        	break;
   case 2:
        	System.out.print(2);
        	break;
}

下列语句执行的结果为_______

switch(5){
	default:
        	System.out.print(5);
	case 5:
        	System.out.print(0);
   case 1:
        	System.out.print(1);
        	break;
   case 2:
        	System.out.print(2);
        	break;
}

三、if 语句和 switch 语句的区别

if 和 switch 语句都表示条件语句,可以从使用效率和实用性两方面加以区分。
1. 从使用效率上区分
从使用效率上区分,在对同一个变量的不同值作条件判断时,既可以使用 switch 语句,也可以使用 if 语句。使用 switch 语句的效率更高一些,尤其是判断的分支越多,越明显。
2. 从实用性上区分
从语句的实用性角度区分,switch 语句不如 if 条件语句,if 语句是应用最广泛和最实用的语句。
3. 何时使用 if 语句和 switch 语句
在程序开发的过程中,何时使用 if 语句和 switch 语句,需要根据实际情况而定,应尽量做到物尽其用。不能因为 switch 语句的效率高就一直使用,也不能因为 if 语句常用就不用 switch 语句。需要根据实际情况,具体问题具体分析,使用最适合的条件语句。

一般情况下,对于判断条件较少的,可以使用 if 条件语句,但是在实现一些多条件的判断中,最好使用 switch 语句。