# 第三章流程控制

# 流程控制

image-20221227134406443

# 流程控制语句分类

顺序结构

分支结构(if,switch)

循环结构(for,while,do...while)

# 顺序结构

顺序结构是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的。

# if语句

# 格式1:

if(关系表达式){
	语句体;
}
1
2
3

执行流程: 1.首先计算关系表达式的值 2.如果关系表达式的值为true就执行语句体 3.如果关系表达式的值为false就不执行语句体 4.继续执行后面的语句内容

代码案例:

int a = 10;
int b = 20;
//需求:判断a和b的值是否相当,如果相等,就在控制台输出,a等于b
1
2
3

image-20221227135439324

代码案例:

需求:心跳(60-100)之间是正常的,否则系统提示进一步检查

# 格式2:

if(关系表达式){
	语句体1;
}else{
	语句体2;
}
1
2
3
4
5

执行流程:

1.首先计算关系表达式的值

2.如果关系表达式的值为true就执行语句体1

3.如果关系表达式的值为false就执行语句体2

4.继续执行后面的语句

代码案例:

//定义两个变量
int a = 10;
int b = 20;
//需求:判断a是否大于b,如果是,在控制台输出:a的值大于b,如果不是,在控制台输出:a的值不大于b
1
2
3
4

image-20221228113523213

案例:奇偶数

需求:任意给出一个整数,请用程序实现判断该整数是奇数还是偶数,并在控制台输出该整数是奇数还是偶数

分析:

1.为了体现任意给出一个整数,采用键盘录入一个数据

2.判断整数是偶数还是奇数需要分两种情况来判断,使用if...else结构

3.判断是否是偶数需要使用取余运算符来实现该功能

案例:发红包

需求:发送一个1314的红包,请用程序判断钱包是否有1314,如果有,发送成功,如果没有,发送失败

# 格式3:

if(关系表达式1){
	语句体1;
}else if(关系表达式2){
	语句体2;
}else if(关系表达式n){
	语句体n;
}
.....
else{
	语句体n;
}
1
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;
}
1
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(初始化语句;条件判断语句;条件控制语句){
	循环体语句;
}
1
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();
        }
1
2
3
4
5
6
7
8
9
10
11
12
13

# while语句

循环结构特征:

主要是用于不知道循环多少次的场景

格式:

初始化语句
while(条件判断语句){
	循环体语句;
	条件控制语句;
}
1
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);
1
2
3
4
5
6
7
8

# do...while语句

格式:

初始化语句
do{
	循环体语句;
	条件控制语句;
}while(条件判断语句);
1
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;
			}
		}
1
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

案例:

打印******
1
打印
******
******
******
******
******
1
2
3
4
5
6
打印
*
**
***
****
*****
1
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();
        }
1
2
3
4
5
6
打印
****
***
**
*
1
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();
        }
1
2
3
4
5
6

打印

第一个for循环用来打印行数

第二个for循环用来打印

第三个for循环用来打印*

+++*
++***
+*****
*******
1
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();
        }

1
2
3
4
5
6
7
8
9
10
11
12
13
14

打印

   *
  ***
 *****
*******
 *****
  ***
   *
1
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();
        }
1
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);
}
1
2
3
4
5
6
7

# Random随机数

# Random的作用和使用步骤

作用:产生一个随机数

使用步骤:

1.导包

import java.util.Random;
1

2.创建对象

Random r = new Random();
1

3.获取随机数

int number = r.nextInt(10);//获取数据的范围:[0,10),包括0,不包括10
1

代码演示:

用循环获取10个随机数

获取一个1-100之间的随机数

案例:猜数字

需求:程序自动生成一个1-100之间的数字,使用程序实现猜出这个数字是多少? 当猜措的时候根据不同情况给出相应的提示 如果猜的数字比真实数字大,提示你猜的数据大了 如果猜的数字比真实数字小,提示你猜的数据小了 如果猜的数字与真实数字相等,提示恭喜你猜中了

分析:

随机生成一个1-100之间的数据

使用死循环让用户不断提示用户猜测,猜大提示过大,猜小提示过小,猜中结束游戏

最近更新: 5/20/2025, 2:44:56 PM
失败才是人生的主旋律   |