if条件语句

条件语句可根据不同的条件执行不同的语句。条件语句包括 if 条件语句与 switch 多分支语句。本节将向读者讲解条件语句的用法。

使用 if 条件语句,可选择是否要执行紧跟在条件之后的那个语句。关键字 if 之后是作为条件的 “布尔表达式”。如果该表达式返回的结果为 true,则执行其后的语句;如果为 false,则不执行 if 条件之后的语句。if 条件语句可分为简单的 if 条件语句、if…else 语句和 if…else if 多分支语句。

简单的if条件语句

简单的 if 条件语句是用于告诉程序在某种条件成立的情况下执行某一段语句,而在另一种条件成立的情况下执行另一段的语句。

简单的 if 条件语句的语法如下:

if(布尔表达式) {
  语句序列
}
  • 布尔表达式:必要参数,表示最后返回的结果必须是一个布尔值。它可以是一个单纯的布尔变量或常量,也可以是使用关系或布尔运算符的表达式。

  • 语句序列:可选参数。它可以是一条或多条语句,当表达式的值为 true 时执行这些语句。若语句序列中仅有一条语句,则可以省略条件语句中的 “{ }”。

如果语句序列中只有一条语句,则可以采用以下写法:

int a = 100;
if(a == 100)
    System.out.print("a 的值是 100");

虽然 if 条件语句中的语句序列只有一条语句时,省略 “{ }” 并无语法错误,但为了增强程序的可读性,最好不要省略。条件语句后的语句序列被省略时:可以保留外面的大括号;也可以省略大括号,然后在末尾添加 “;”。如下所示的两种情况都是正确的:

boolean b = false;
if(b);
boolean b = false;
if(b){ }

简单的 if 条件语句的执行过程如图4.1所示。

【例4.1】判断手机号码是否存在(实例位置:资源包\TM\sl\4\1)

创建 TakePhone 类,模拟拨打电话场景,如果电话号码不是 84972266,则提示拨打的号码不存在。

public class TakePhone {
	public static void main(String[] args) {
		int phoneNumber = 123456789; // 创建变量,保存电话号码
		if (phoneNumber != 84972266) { // 判断此电话号码是否是84972266
			// 如果不是84972266号码,则提示号码不存在
			System.out.println("对不起,您拨打的号码不存在!");
		}
	}
}

运行结果如下:

     对不起,您拨打的号码不存在!

if..else语句

if…else 语句是条件语句中最常用的一种形式,它会针对某种条件有选择地做出处理。这通常表现为 “如果满足某种条件,就进行某种处理,否则就进行另一种处理”。语法如下:

if(条件表达式) {
  语句序列1
} else {
  语句序列2
}

if 后面 “()” 内的表达式的值必须是 boolean 型的。如果表达式的值为 true,则执行紧跟 if 语句的复合语句;如果表达式的值为 false,则执行 else 后面的复合语句。if…else 语句的执行过程如图4.2所示。

image 2024 02 28 13 07 11 459
Figure 1. 图4.1 if条件语句的执行过程
image 2024 02 28 13 07 46 710
Figure 2. 图4.2 if…else语句的执行过程

同简单的 if 条件语句一样,如果 if…else 语句的语句序列中只有一条语句(不包括注释),则可以省略该语句序列外面的 “{ }”。有时为了编程的需要,else 或 if 后面的 “{ }” 中可以没有语句。

【例4.2】使用if…else语句校验密码(实例位置:资源包\TM\sl\4\2)

在项目中创建 Login 类,在主方法中定义变量,并通过使用 if…else 语句判断变量的值,以决定输出结果。

public class Login {
	public static void main(String[] args) {
		int password = 987654321;// 密码值
		if (123456789 == password) {// 如果密码是123456789
			System.out.println("密码正确,欢迎登录");// 密码正确的提示
		} else {// 否则
			System.out.println("密码错误,拒绝登录");// 密码错误的提示
		}
	}
}

运行结果如下:

     密码错误,拒绝登录

if..else if多分支语句

if…else if 多分支语句用于针对某一事件的多种情况进行处理。通常表现为 “如果满足某种条件,就进行某种处理;否则,如果满足另一种条件,则执行另一种处理”。语法如下:

if(条件表达式1) {
  语句序列1
} else if(条件表达式2) {
  语句序列2
}
...
else if(条件表达式n) {
  语句序列n
}
  • 条件表达式1~条件表达式n:必要参数。可以由多个表达式组成,但最后返回的结果一定要为 boolean 类型。

  • 语句序列:可以是一条或多条语句。当条件表达式 1 的值为 true 时,执行语句序列1;当条件表达式 2 的值为 true 时,执行语句序列2,以此类推。当省略任意一组语句序列时,可以保留其外面的 “{ }”,也可以将 “{ }” 替换为 “;”。

if…else if多分支语句的执行过程如图4.3所示。

image 2024 02 28 13 14 10 537
Figure 3. 图4.3 if…else if多分支语句的执行过程

【例4.3】使用 if…else if 语句实现饭店座位的分配(实例位置:资源包\TM\sl\4\3)

创建 Restaurant 类,声明整型变量 count 表示用餐人数,根据人数安排客人到 4人桌、8 人桌或包厢用餐。

public class Restaurant {
	public static void main(String args[]) {
		System.out.println("欢迎光临,请问有多少人用餐?"); // 输出问题提示
		int count = 9; // 用餐人数
		System.out.println("回答:" + count + "人");// 输出回答
		if (count <= 4) { // 如果人数小于4人
			System.out.println("客人请到大厅4人桌用餐"); // 请到4人桌
		} else if (count > 4 && count <= 8) { // 如果人数在4-8人之间
			System.out.println("客人请到大厅8人桌用餐"); // 请到4人桌
		} else if (count > 8 && count <= 16) { // 如果人数在8-16人之间
			System.out.println("客人请到楼上包厢用餐"); // 请到包厢
		} else { // 当以上条件都不成立时,执行的该语句块
			System.out.println("抱歉,我们店暂时没有这么大的包厢!"); // 输出信息
		}
	}
}

运行结果如下:

     欢迎光临,请问有多少人用餐?
     回答:9人
     客人请到楼上包厢用餐

if语句的嵌套

if 语句和 if…else 语句都可以嵌套判断语句。在 if 语句中嵌套 if…else 语句。语法格式如下:

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

在 if…else 语句中嵌套 if…else 语句。形式如下:

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

判断语句可以有多种嵌套方式,可以根据具体需要进行设计,但一定要注意逻辑关系的正确处理。

例如:使用嵌套的判断语句,判断控制台输入的年份是否是闰年;能被 4 整除且不能被 100 整除的年份,或者能被 400 整除的年份。代码如下:

import java.util.Scanner;
public class JudgeLeapYear {
    public static void main(String[] args) {
        int iYear;      // 创建整型变量,保存输入的年份
        Scanner sc = new Scanner(System.in);  // 创建扫描器
        System.out.println("please input number");
        iYear = sc.nextInt();  // 在控制台上输入一个数字
        if(iYear % 4 == 0) { // 如果能被 4 整除
            if (iYear % 100 == 0) { // 如果能被 100 整除
                if (iYear % 400 == 0) { // 如果能被 400 整除
                    System.out.println("it is a leap year"); // 是闰年
                } else {
                    System.out.println("It is not a leap year"); // 不是闰年
                }
            } else
                System.out.println("It is a leap year"); // 是闰年
        }else
            System.out.println("It is not a leap year"); // 不是闰年
    }
}

当在控制台上输入 2024 时,运行结果如图4.4所示。

当在控制台上输入 2026 时,运行结果如图4.5所示。

image 2024 02 28 13 39 34 506
Figure 4. 图4.4 判断2024年是否是闰年
image 2024 02 28 13 40 03 381
Figure 5. 图4.5 判断2026年是否是闰年