day03–流程控制语句(一)
文章目录
提示:以下是本篇文章正文内容,下面案例可供参考
一、流程控制
1.顺序结构
(1)所有编程语言最核心,最基础的结构是"顺序结构",代码从上至下依次执行
(2)在顺序结构中包含:分支结构、循环结构、调用结构
(3)分支结构和循环结构统称为"流程控制语句"
流程控制语句分类:
分支结构
判断语句:if语句
选择语句:switch语句
循环结构
for语句
while语句
do...while语句
2. if 语句
(1)if语句的第一种格式:
if (条件判断语句) {
语句体
}
执行流程
1.先确认条件判断语句的结果是true还是false;
2.如果是true,执行语句体,if语句结束;
如果是false,if语句结束;
代码如下(示例):
//需求:判断指定整数是否为偶数
System.out.println("开始");
//声明并初始化一个整数
int num = 212;
//判断num是否为偶数
if (num % 2 == 0) {
System.out.println(num + "是偶数");
}
System.out.println("结束");
(2)if语句的第二种格式:
if (条件判断语句) {
语句体1;
} else {
语句体2;
}
执行流程:
1.先确认条件判断语句的结果是true还是false
2.如果是true,执行语句体1,if语句结束;
如果是false,执行语句体2,if语句结束;
注意事项:
三元运算符和if语句的第二种格式比较相像,在实际开发中更推荐使用if语句的第二种格式;
原因:三元运算符具有一定的局限性,里面只能存放结果值,无法编写语句,只有在if语句的第二种格式比较简单的时候,才编写三元运算符进行简化
代码如下(示例):
需求:判断一个整数的奇偶性
//声明并初始化一个整数
int num = 215;
//判断num的奇偶性
if (num % 2 == 0) {
System.out.println(num + "是偶数");
} else {
System.out.println(num + "是奇数");
}
(3)if语句的第三种格式:
if (条件判断语句1) {
语句体1
} else if (条件判断语句2) {
语句体2
}
......
else if (条件判断语句n) {
语句体n
} else {
语句体n+1
}
执行流程:
1.先确认条件判断语句1的结果是true还是false;
2.如果是true,执行语句体1,if语句结束;
如果是false,确认条件判断语句2的结果是true还是false;
…
3.当所有的条件判断语句都为false时,执行else中的语句体n+1
注意事项:
if语句的第三种格式可以将else语句省略不写,但推荐写上
代码如下(示例):
需求:判断两个整数之间的关系(大于,等于,小于)
//声明并初始化两个整数
int a = 3;
int b = 4;
//进行两个整数关系的判断
if (a > b) {
System.out.println("a > b");
} else if (a < b) {
System.out.println("a < b");
} else {
System.out.println("a = b");
3.switch语句:
switch语句的格式:
switch (数据值) {
case 数据值1:
语句体1
break;
case 数据值2:
语句体2
break;
......
case 数据值n:
语句体n
break;
default:
语句体n+1
break
}
执行流程:
1.先确认switch()中的数据值是多少;
2.将数据值1和数据值进行匹配,看是否匹配成功;
3.如果匹配成功,执行语句体1,执行break关键字,switch语句结束;
如果匹配失败,将数据值2和数据值进行匹配,看是否匹配成功;
…
4.当所有case后的数据值都和数据值匹配失败,执行default中的语句体n+1,执行break关键字,switch语句结束;
代码如下(示例):
//声明并初始化段位的变量
int level = 2;
//进行数据的选择匹配
switch (level) {
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;
default:
System.out.println("嘴强王者无疑了");
break;
switch语句的注意事项:
1.switch()中数据值的数据类型:
基本类型只支持int类型,考虑到有三种类型可以自动提升成int,衍生出四种支持类型,分别是byte,short,char,int
引用类型:
在JDK1.4(包含)及其以前,不支持引用类型
在JDK5.0(包含)及其以后,支持枚举类型Enum
在JDK7.0(包含)及其以后,支持字符串类型String
2.swtich语句中的default和if语句第三种格式中的else一样,都可以省略不写,推荐写上
3.switch语句中的case和default顺序可以颠倒,不影响执行流程,推荐将default写在所有case的下面
4.switch语句中break关键字可以省略不写,但是会出现case穿透效果
4.for语句
for语句的格式:
for (初始化语句;循环条件语句;迭代语句) {
循环体语句
}
初始化语句:声明并初始化记录循环次数(范围)的"循环变量"
循环条件语句:判断循环变量是否满足循环条件
迭代语句:循环变量的后续操作
循环体语句:重复执行多次的代码
执行流程:
1.先执行初始化语句;
2.确认循环条件语句的结果是true还是false;
3.如果是true,执行循环体语句,继续执行第4步;
如果是false,for语句结束;
4.执行迭代语句;
5.跳回第2步,继续执行
//需求:打印10遍HelloWorld
for (int i = 1; i <= 10 ; i++) {
System.out.println("HelloWorld");
练习
/*练习:打印所有的水仙花数并输出共有多少个
所谓的水仙花数是指一个三位数,其各位数字的立方和等于该数本身。
举例:153就是一个水仙花数。
153 = 1*1*1 + 5*5*5 + 3*3*3
*/
//声明并初始化记录水仙花数个数的计数器变量
int count = 0;
//遍历所有的三位数
for (int i = 100; i < 1000 ; i++) {
//获取每个三位数字个十百上的数字
int ge = i % 10;
int shi = i / 10 % 10;
int bai = i / 100 % 10;
//进行数据的筛选
if (i == bai*bai*bai + shi*shi*shi + ge*ge*ge) {
//计数器累加
count++;
System.out.println(i);
}
}
//输出计数器变量
System.out.println("count = " + count);
5.while语句
while语句的格式:
while (循环条件语句) {
循环体语句
}
执行流程:
1.先确认循环条件语句的结果是true还是false;
2.如果是true,执行循环体语句;
如果是false,while语句结束;
3.跳回第1步,继续执行
为了和for循环语句进行相互转换,衍生出while循环语句的扩展格式
初始化语句:
while (循环条件语句) {
循环体语句
迭代语句
}
//需求:打印10遍HelloWorld
int i = 1;
while (i <= 10) {
System.out.println("HelloWorld");
i++;
}
6.dowhile语句
dowhile语句的格式:
do {
循环体语句
} while (循环条件语句);
执行流程:
1.先执行循环体语句
2.再确认循环条件语句的结果是true还是false;
3.如果是true,跳回第1步继续执行;
如果是false,dowhile语句结束
为了和for循环语句进行相互转换,衍生出dowhile扩展格式
初始化语句;
do {
循环体语句
迭代语句
} while (循环条件语句);
//需求:打印10遍HelloWorld
int i = 1;
do {
System.out.println("HelloWorld");
i++;
} while (i <= 10);
补充知识点
三种循环的区别:
从扩展格式角度分析:
1.循环变量的作用域不同:
for语句结束,变量在内存中释放
while和dowhile语句在语句结束后依然可以使用
2.循环条件语句的判断次数不同:
同需求下,dowhile语句循环条件语句判断次数比while和for少一次
从标准格式角度分析:
1.如果需求有明显的循环次数或者范围,选择for语句
2.如果需求没有明显的循环次数或者范围,选择while语句
3.在实际开发中,不会使用dowhile语句