前言
今天开始,我们正式进入Java
流程控制的讲解. 在"架构整洁之道"
一书中提到,早在上个世纪五六十年代. Bohm
和Jocopin
就证明了可以用"顺序结构"
,"分支结构"
, "循环结构"
这三种结构造成任何程序.目前几乎所有的程序都采用这三种流程控制.
其实我们开学习,开发过程中, 经常听到的所谓编程思维. 而流程控制在编程思维中占有很基础很重要的地位. 即你如何控制程序的运行.
"顺序结构"
不言而喻就是代码按照从上到下依次执行.那么我们就从分支语句开始讲解.分支语句中最常见的就是if...else
条件分支语句.
接下来我们先认知一下流程控制的不同结构
1. 流程控制
1.1. 简介
在Java
项目中, 都是以英文分号;
作为代码语句的结束符. 多条语句的执行顺序默认按照"顺序结构"
执行. 早在程序最初的纸带打孔时代, 程序就是如此执行的. 但只有这一种控制结构, 程序将无法实现更复杂的场景. 比如需要根据添加判断,执行不同的程序, 或跳转到指定的程序执行, 该如何处理.
后来就出现了goto
语句, 跳转到指定代码行执行代码. 但早期的程序员已经论证过 goto
语句的危害性. 他们也论证了"顺序结构"
与"流程控制结构(分支与循环)"
组合起来就可以实现程序模块的运行最小控制集. 结构化编程也因此到来.
所以我们学习流程控制语句, 更多的是在"分支结构"
,和"循环结构"
上. "顺序结构"
是程序默认执行逻辑.
1.2. 分类
Java
中的流程控制语句, 根据结构化程序设计规范, 整体上分为三大类
其实这些流程控制逻辑早在我们高中时就已经学习过了, 就是数学中的流程图.你不妨回顾一下.
我们首先来看一下, 不同流程控制结构中, 程序执行的逻辑.
1.3. 顺序结构
顺序结构
可以说是项目中最简单, 最基本的流程控制语句了. 没有什么特殊的语法. 程序按照先后顺序编写即可. 程序默认按照先后顺序执行. 因此程序中大多数代码都是顺序执行.
顺序结构的流程图如下:
示例代码:
// 测试代码:
public class Test {
public static void main(String[] args) {
//换行输出
System.out.println("Hello");
System.out.println("World");
}
}
运行结果:
如果你此时调换换行语句的顺序, 代码运行结果也将变化.
1.4. 分支结构
所谓的分支结构
, 就是根据条件判断, 有选择的执行代码块中的代码. 在Java
中, 分支结构包括if...else..
语句和switch...case
两种条件分支语句.
我们先看一下分支结构流程图, 理解分支结构的逻辑:
1.5. 循环结构
循环结构
就是在条件满足的情况下, 反复执行特定的代码.在Java
中包括while
, do...while
, for
, foreach
等不同的循环语句
带大家看一下循环结构的流程图:
2. 条件分支之if…else
前面我们也讲到, 条件分支包括两种语法结构. 而本章主要对if...else
语句进行重点分析;
2.1. if 单分支条件判断
if...else
语句最基本的结构就是if 单分支结构
. 在单分支结构中我们将不使用else
分支. 在单分支语句中, 当条件判断为真时, 执行分支代码. 否则就不执行.
其单分支语法格式如下
if(条件表达式){
代码块;
}
说明:
- 条件表达式结果必须是一个布尔值,或者本身就是一个布尔类型的变量
- 当条件表达式结果为true 执行代码块中的语句, false 则不执行
单分支语句流程图
示例代码:
// 年龄满18 就可以考驾照了
int age = 18;
// 判断年龄是否大于等于18
if(age >= 18){
System.out.println("你的年龄已经满足要求,可以考驾照了");
}
2.2. if… else 双分支条件判断
双分支条件判断使用else
, else
表示否则, 即当前面条件不满足的情况下执行else
对应的代码块.
语法格式
if(条件表达式){
代码块1;
}else{
代码块2
}
说明:
- 根据条件表达式的结果(true 或 false),判断执行
代码块1
或代码块2
- 当条件表达式结果为
true
时执行代码块1
,false
时执行代码块2
具体的流程图如下:
示例代码:
// 年龄满18 就可以考驾照了
int age = 18;
// 判断年龄是否大于等于18
if(age >= 18){
System.out.println("你的年龄已经满足要求,可以考驾照了");
}else{
// 否则: 表示年龄小于18岁
System.out.println("你的年龄不满足要求, 不能考驾照");
}
2.3. if… else if… else 多分支条件判断
多分支结构
本质就是通过多个条件行程多条通路. 根据条件进入某一条分支进行执行.
多分支采用else if
, 也就是我们常说的 否则如果
, 表示第一个条件不满足情况下, 进入第二个条件判断. 依次类推形成多条分支结构.
语法格式:
if(条件表达式1){
代码块1;
}else if(条件表达式2){
代码块2;
// ....
}else{
代码块3;
}
说明:
- 首先会判断
条件表达式1
, 当判断结果为true
时, 则执行代码块1
, - 当
条件表达式1
的结果为false
时, 则会判断条件表达式2
, 当条件2
为true
时, 执行代码块2
- 当
条件表达式2
的结果为false
时, 则会继续判断后面的条件 - 当所有都有的判断条件都为
false
时, 则会执行else
中的代码块
具体流程图如下:
示例代码:
// 考试成绩
int score = 98;
if(score >= 90){
System.out.println("成绩优秀!");
}else if(score >= 70){
System.out.println("成绩良好!");
}else if(score >= 60){
System.out.println("成绩及格!");
}else{
System.out.println("成绩不及格及格!");
}
2.4. if…else 嵌套使用
在if...else
语句的代码块中,可以嵌套另外一个if...else
条件分支语句 , 形成嵌套结构
执行的特点:
- 如果是嵌套在
if
代码块中的,只有当外部的if
条件满足,才会去判断内部的条件 - 如果是嵌套在
else
代码块中的,只有当外部的if
条件不满足,进入else
后,才会去判断内部的条件
示例代码:
// 判断三个数字的大小
int num1 = 23,num2 = 32,num3 = 12;
if(num1 >= num2){
if(num3 >= num1)
System.out.println(num2 + "-" + num1 + "-" + num3);
else if(num3 <= num2)
System.out.println(num3 + "-" + num2 + "-" + num1);
else
System.out.println(num2 + "-" + num3 + "-" + num1);
}else{
if(num3 >= num2){
System.out.println(num1 + "-" + num2 + "-" + num3);
}else if(num3 <= num1){
System.out.println(num3 + "-" + num1 + "-" + num2);
}else{
System.out.println(num1 + "-" + num3 + "-" + num2);
}
}
2.5. 其他说明:
- 当
代码块
中只有一条执行语句时,一对{}可以省略,但是建议保留 - 当
if-else
结构是“多选一”时,最后的else是可选的,根据需要可以省略
3. 结语
至此, 就把流程控制中第一种条件分支语句(if..else)
给大家讲解完毕了.
到此,你需要能够理解程序的三种, 准确的说是两种流程控制, 即分支结构和循环结构.掌握条件分支结构中if...else
语句的几种使用方式.