# 第三章流程控制
# 流程控制
# 流程控制语句分类
顺序结构
分支结构(if,switch)
循环结构(for,while,do...while)
# 顺序结构
顺序结构是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的。
# if语句
# 格式1:
if(关系表达式){
语句体;
}
2
3
执行流程: 1.首先计算关系表达式的值 2.如果关系表达式的值为true就执行语句体 3.如果关系表达式的值为false就不执行语句体 4.继续执行后面的语句内容
代码案例:
int a = 10;
int b = 20;
//需求:判断a和b的值是否相当,如果相等,就在控制台输出,a等于b
2
3
代码案例:
需求:心跳(60-100)之间是正常的,否则系统提示进一步检查
# 格式2:
if(关系表达式){
语句体1;
}else{
语句体2;
}
2
3
4
5
执行流程:
1.首先计算关系表达式的值
2.如果关系表达式的值为true就执行语句体1
3.如果关系表达式的值为false就执行语句体2
4.继续执行后面的语句
代码案例:
//定义两个变量
int a = 10;
int b = 20;
//需求:判断a是否大于b,如果是,在控制台输出:a的值大于b,如果不是,在控制台输出:a的值不大于b
2
3
4
案例:奇偶数
需求:任意给出一个整数,请用程序实现判断该整数是奇数还是偶数,并在控制台输出该整数是奇数还是偶数
分析:
1.为了体现任意给出一个整数,采用键盘录入一个数据
2.判断整数是偶数还是奇数需要分两种情况来判断,使用if...else结构
3.判断是否是偶数需要使用取余运算符来实现该功能
案例:发红包
需求:发送一个1314的红包,请用程序判断钱包是否有1314,如果有,发送成功,如果没有,发送失败
# 格式3:
if(关系表达式1){
语句体1;
}else if(关系表达式2){
语句体2;
}else if(关系表达式n){
语句体n;
}
.....
else{
语句体n;
}
2
3
4
5
6
7
8
9
10
11
执行流程:
1.首先计算关系表达式1的值 2.如果值为true就执行语句体1;如果值为false就计算关系表达式2的值 3.如果值为true就执行语句体2;如果值为false就计算关系表达式3的值 4.如果没有任何关系表达式为true,就执行语句体n+1。
代码案例:
需求:键盘录入一个星期数(1,2,3,4,5,6,7),输出对应的星期一,星期二....星期天
案例:考试奖励
需求:小明快要期末考试了,小明爸爸对他说,会根据他不同的考试成绩,送他不同的礼物,假如你可以控制小明的得分,请用程序实现小明到底该获得什么样的礼物,并在控制台输出。
# switch语句
格式:
switch(表达式){
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
case 值3:
语句体3;
break;
...
default:
语句体n;
break;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
格式说明: 1.表达式:取值为byte、short、int、char,JDK5以后可以是枚举,JDK7以后可以是String. 2.case:后面跟的是要和表达式进行比较的值. 3.break:表示中断,结束的意思,用来结束switch语句。 4.default:表示所有情况都不匹配的时候,就执行该处的内容,和if语句的else相似。
执行流程:
首先计算表达式的值。
依次和case后面的值进行比较,如果有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束。
如果所有的case后面的值和表达式的值都不匹配,就会执行default里面的语句体,然后程序结束掉
代码演示:
需求:键盘录入一个星期数(1,2,3,4,5,6,7),输出对应的星期一,星期二....星期天
案例:春夏秋冬
需求:一年有12个月,分属于春夏秋冬4个季节,键盘录入一个月份,请用程序实现判断该月份属于哪个季节,并输出。
春:3、4、5 夏:6、7、8 秋:9、10、11 冬:1、2、12
分析:
1.键盘录入月份数据,使用变量接收
2.这里采用switch语句
3.在每种情况中,完成输出对应的季节
# 循环语句
假如今天你把你自己的女朋友惹生气了,你应该怎么办?
# for循环语句
循环结构特征:
重复做某件事情,具有明确的开始和停止标志
循环结构的组成:
初始化语句:用于表示循环开启时的起始状态,简单说就是循环开始的时候什么样 条件判断语句:用于表示循环反复执行的条件,简单说就是判断循环是否能一直执行下去 循环体语句:用于表示循环反复执行的内容,简单说就是循环反复执行的事情 条件控制语句:用于表示循环执行中每次变化的内容,简单说就是控制循环是否能执行下去
for循环语句的格式:
for(初始化语句;条件判断语句;条件控制语句){
循环体语句;
}
2
3
执行流程:
1.执行初始化语句 2.执行条件判断语句,看其结果是true还是false 如果是false,循环结束 如果是true,继续执行 3.执行循环体语句 4.执行条件控制语句 5.回到2继续
案例:哄女朋友开心
假如今天你把你自己的女朋友惹生气了,你应该怎么办?
使用循环输出一百次我错了;
案例:输出数据
案例:
需求:编写程序从1循环到150,并在每行打印一个值
另外在每个3的倍数行上打印出"foo",
另外在每个5的倍数行上打印出"biz",
另外在每个7的倍数行上打印出"baz",
for (int i = 1; i<=150;i++){
System.out.print(i+"");
if (i%3 == 0){
System.out.print("foo");
}
if (i%5 == 0){
System.out.print("biz");
}
if (i%7 == 0){
System.out.print("baz");
}
System.out.println();
}
2
3
4
5
6
7
8
9
10
11
12
13
# while语句
循环结构特征:
主要是用于不知道循环多少次的场景
格式:
初始化语句
while(条件判断语句){
循环体语句;
条件控制语句;
}
2
3
4
5
执行流程: 1.执行初始化语句 2.执行条件判断语句,看其结果是true还是false 如果是false,循环结束 如果是true,继续执行 3.执行循环体语句 4.执行条件控制语句 5.回到2继续
代码演示:在控制台输出5次HelloWorld
案例:珠穆朗玛峰
需求:世界最高山峰是珠穆朗玛峰(8848.86米=8848860毫米),假如我有一张足够大的纸,它的厚度是0.1毫米。 请问,我折叠多少次,可以折成珠穆朗玛峰的高度?
分析:
1.因为要反复折叠,所以要使用循环,但是不知道折叠多少次,这种情况下更适合使用while循环
2.循环的执行过程中每次纸张折叠,纸张的厚度要加倍,因此需要先定义纸张厚度,在循环中使厚度加倍
3.折叠的过程中当纸张厚度大于珠峰就停止了,因此继续执行的要求是纸张厚度小于珠峰高度
4.设置一个计数器,在循环中执行累加,对应折叠了多少次
double peakHeight = 8848860;
double paperThickness = 0.1;
int count = 0;
while (paperThickness < peakHeight) {
paperThickness *= 2;
count++;
}
System.out.println("纸张折叠 " + count + " 次后\n纸张厚度为:" + paperThickness);
2
3
4
5
6
7
8
# do...while语句
格式:
初始化语句
do{
循环体语句;
条件控制语句;
}while(条件判断语句);
2
3
4
5
执行流程:
1.执行初始化语句 2.执行循环体语句 3.执行条件控制语句 4.执行条件判断语句,看其结果是true还是false 如果是false,循环结束 如是true,继续执行 5.回到2继续
注意:
do...while语句至少会执行一次
do...while和while如果是正常使用的话是没有任何区别的
案例:
打印五遍HelloWorld
案例
:
遍历100以内的偶数
# 循环语句综合例题
从键盘读入个数不确定的整数,并判断读入的正数和负数的个数,输入为0时结束程序。
System.out.println("请输入一个整数:");
Scanner scan = new Scanner(System.in);
int positiveNumber = 0; //记录正数的个数
int negativeNumber = 0; //记录负数的个数
for (;;) { //或者是while(true)
int number = scan.nextInt();
//判断number的正负情况
if (number > 0) {
positiveNumber++;
} else if (number < 0) {
negativeNumber++;
} else {
System.out.println("输入的正数的个数为:" + positiveNumber + ",负数的个数为:" + negativeNumber);
break;
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 死循环
for(;😉{} while(true){} do{}}while(true):
while的死循环是最常用的
# 循环嵌套
1.循环嵌套:将一个循环结构A声明在另一个循环结构B的循环体中,就构成了嵌套循环
外层循环:循环结构B
内层循环:循环结构A
案例:
打印******
打印
******
******
******
******
******
2
3
4
5
6
打印
*
**
***
****
*****
2
3
4
5
6
for (int i = 1;i<=5;i++){
for (int j = 1;j<=i;j++){
System.out.print("*");
}
System.out.println();
}
2
3
4
5
6
打印
****
***
**
*
2
3
4
5
for (int i = 1; i<=4;i++){
for (int j = 1; j<=5-i;j++){
System.out.print("*");
}
System.out.println();
}
2
3
4
5
6
打印
第一个for循环用来打印行数
第二个for循环用来打印
第三个for循环用来打印*
+++*
++***
+*****
*******
2
3
4
//实现上三角形
for (int i =1; i <=4 ; i++) {
//打印空格
for (int j = 1; j <=4-i ; j++) {
System.out.print(" ");
}
//打印*号
for (int k = 1; k <=2*i-1 ; k++) {
System.out.print("*");
}
//打印完一行,进行换行
System.out.println();
}
2
3
4
5
6
7
8
9
10
11
12
13
14
打印
*
***
*****
*******
*****
***
*
2
3
4
5
6
7
//实现上三角形
for (int i =1; i <=4 ; i++) {
//打印空格
for (int j = 1; j <=4-i ; j++) {
System.out.print(" ");
}
//打印*号
for (int k = 1; k <=2*i-1 ; k++) {
System.out.print("*");
}
//打印完一行,进行换行
System.out.println();
}
//实现下三角形
for (int i = 3; i>=1; i--) {
for (int j = 1; j <=4-i ; j++) {
System.out.print(" ");
}
for (int k = 1; k <=2*i-1 ; k++) {
System.out.print("*");
}
//打印完一行,进行换行
System.out.println();
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 跳转控制语句
continue:用在循环中,基于条件控制,跳过某次循环体内容的执行,继续下一次的执行
break:用再循环中,基于条件控制,终止循环体内容的执行,也就是说结束当前的整个循环
代码演示:
for(int i = 1;i<=5;i++){
if(i%2 == 0){
//continue;
//break;
}
System.out.println(i);
}
2
3
4
5
6
7
# Random随机数
# Random的作用和使用步骤
作用:产生一个随机数
使用步骤:
1.导包
import java.util.Random;
2.创建对象
Random r = new Random();
3.获取随机数
int number = r.nextInt(10);//获取数据的范围:[0,10),包括0,不包括10
代码演示:
用循环获取10个随机数
获取一个1-100之间的随机数
案例:猜数字
需求:程序自动生成一个1-100之间的数字,使用程序实现猜出这个数字是多少? 当猜措的时候根据不同情况给出相应的提示 如果猜的数字比真实数字大,提示你猜的数据大了 如果猜的数字比真实数字小,提示你猜的数据小了 如果猜的数字与真实数字相等,提示恭喜你猜中了
分析:
随机生成一个1-100之间的数据
使用死循环让用户不断提示用户猜测,猜大提示过大,猜小提示过小,猜中结束游戏