Java学习之旅第一季-21:控制语句之if语句

21.1 控制语句

程序设计的三种基本结构包括顺序结构、选择结构和循环结构。这些结构是构建任何简单或复杂算法的基础。

默认情况下,Java 程序中的所有语句都会按照它们在程序中的出现顺序进行执行。然而,我们可以使用控制语句来改变执行顺序。有时可能希望仅在特定条件为真时才执行某一条语句或一组语句。有时又希望重复执行一组语句若干次,或者只要特定条件为真就一直执行这些语句。所有这些在 Java 中,都可以通过控制语句来实现这些功能。

Java 的程序控制语句可以分为以下几类:

  • 选择语句:可以使程序能够根据表达式的结果或变量的状态选择不同的执行路径。
  • 循环语句:使程序执行能够重复执行一组或多组语句(即循环语句构成了循环结构)。
  • 跳转语句:使您的程序能够以非线性的方式执行。

选择语句也可以称为条件语句或分支语句,其作用是根据不同的条件,程序可以执行不同分支的语句,用来改变程序的执行流程。

Java 支持两种选择语句:if 语句和 switch 语句。下面针对 if 语句介绍几种常见的结构。

21.2 简单if结构

如果某种条件成立,则执行代码块,否则什么不也做,流程如下所示:

image-20251001085337553

Java中的语法形式如下:

if(布尔表达式){
	代码块;
}

语法解释

流程图中的条件对应就是语法中的布尔表达式,代码实现时可以是布尔类型的变量,返回布尔类型的表达式或方法调用。

当 if 后小括号中的的布尔表达式结果为true时,程序会执行大括号里的代码块,否则,不执行该代码块。

在编写代码时,如果 if 后的代码块只有一条语句时,大括号可省略,但是我不推荐这种写法。

代码块(Code Block):是由一组逻辑相关的代码组成的结构,通常用大括号 { } 包围,其中有若干语句。

案例:判断一个数是否是负数,如果是负数,更新为自身的相反数。否则,不做更新。

int num = -2;
if (num < 0) {
    num = -num;
}
System.out.println(num);

代码解释:第1行声明了int类型的变量 num,并且赋初始值为 -2。第2行使用布尔表达式 num < 0 来判断num是否为负数,其结果是一个布尔类型的数据,此时应为 true ,if 关键字发现小括号中的布尔表达式结果是 true,就会执行后面大括号中的代码块。随后 if 结构结束,控制台打印 num 的值。

21.3 if-else结构

如果某种条件成立,则执行代码块,否则执行另一个不同的代码块,流程如下所示:

image-20251001085517940

语法形式如下:

if(布尔表达式){
	代码块1;
}else{
	代码块2;
}

语法解释:

当 if 后小括号中的布尔表达式结果为 true 时,程序执行代码块 1,否则,程序执行代码块 2。

同样的,在编写代码时,如果 if 或 else 后的代码块只有一条语句时,大括号可省略,但是我不推荐这种写法;(后续结构遵循同样的语法,就不再赘述了)。

案例:判断一个数是否是奇数还是偶数,输出结果。

int num = 1;
if (num % 2 == 0) {
    System.out.println(num + "是偶数");
} else {
    System.out.println(num + "是奇数");
}

代码第 2 行到第 6 行就是整个 if/else 结构,第 2 行的意思与上一段简单 if 结构中的代码是一样的,而第 4 行的 else 关键字与 if 是对应的,不可单独出现,表示 if 后的布尔表达式不成立(结果是false)的话,就执行 else 后的代码块;这就是一个二选一的结构,条件要么成立要么不成立,无论如何都要执行对应的代码块。

上面的案例,初学者可能会把条件判断写成下面的代码:

int num = 1;
if (num % 2 == 1) {
    System.out.println(num + "是奇数");
} else {
    System.out.println(num + "是偶数");
}

第 2 行的判断奇数没有考虑到给定的数据是负数的情况,如果是负数,则求余之后的结果是 -1。那么代码就存在所谓的bug。

21.4 if-else-if多分支结构

当条件不止2种时,对应的分支就有多条,此时会出现多分支结构。流程如下所示:

image-20251001090026973

语法形式如下:

if(布尔表达式1){
	语句1;
}else if(布尔表达式2){
	语句2;
}else if(布尔表达式3){
	语句3;
}
……
else{
	语句n;
}

语法解释:

程序从上到下依次计算布尔表达式的结果,当其中一个为true时,程序执行对应的代码块,后续的表达式不会运算。

如果没有任何一个 if 后的布尔表达式成立时,就执行最后 else 后的代码块。

案例:判断月份属于一年中的哪个季节,并且输出结果。

int month = 1;
String season;       // 声明字符串变量,但未赋初始值
// 下面的某一个条件成立时,给season赋值
if (month == 1 || month == 2 || month == 3) {
    season = "春季";
} else if (month == 4 || month == 5 || month == 6) {
    season = "夏季";
} else if (month == 7 || month == 8 || month == 9) {
    season = "秋季";
} else if (month == 10 || month == 11 || month == 12) {
    season = "冬季";
} else {
    season = "月份不存在";
}
System.out.println(month + "月属于" + season + "。");

上面代码从第 4 行到第 14 行属于条件结构,每一个 if 后的表达式运算完都是一个布尔类型的数据,使用逻辑或运算,只要有一个成立,表达式就成立。而且只要有一个条件成立,后面的布尔表达式都不会执行。最后的 else 用来兜底。所以不管month是几月,总会有一个输出的结果。

从 if 结构的语法来说,中间的 else if 可以出现任意多次,最后的 else 可以省略,但通常情况下,省略 else 可能会造成潜在的问题,简单来说就是条件没有覆盖完整。当前面的条件都不成立时,没有合适的代码块执行。

另外从上面的示例中来看,如果缺少最后的 else,就可能缺少为变量 season 赋值的语句,这样第 15 行就会出错。

21.5 小结

本文介绍了Java中的控制语句,主要包括选择结构(if语句)和循环结构。详细讲解了三种if结构:简单if(条件成立执行代码块)、if-else(二选一执行)和if-else-if多分支结构(多条件判断)。通过判断数字奇偶性和月份季节等示例,演示了不同if结构的应用场景和语法特点。文章强调了代码块的概念、布尔表达式的作用,以及else兜底的重要性,帮助读者掌握Java程序流程控制的基本方法。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值