第09章 流程控制语句

第09章 流程控制

流程控制

在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的。也就是说,程序的流程对运行结果 有直接的影响。所以,我们必须清楚每条语句的执行流程。而且,很多时候我们要通过控制语句的执行顺序来实现 我们要完成的功能。

第01章 顺序结构

执行顺序:写在前面的先执行,写在后面的后执行

顺序结构的流程图

public class DemoSequence {
	
	public static void main(String[] args) {
		System.out.println("AAA");
		System.out.println("BBB");
		System.out.println("CCC");
	}
	
}

第02章 判断语句

1.0 if语句第一种格式

if语句第一种格式:单if语句

if(关系表达式){
	语句体
}
1.1 执行流程

1、首先判断关系表达式看其结果是true还是false
2、如果是true就执行语句体
3、如果是false就不执行语句体

单if语句的流程图

1.2 注意

1、关系表达式无论简单还是复杂,结果必须是boolean类型
2、if语句控制的语句体如果是一条语句,大括号可以省略;如果是多条语句,就不能省略。建议永远不要省略。
3、一般来说:有左大括号就没有分号,有分号就没有左大括号

1.3 使用场景

针对结果是boolean类型的判断
针对一个范围的判断
针对几个常量值的判断

public class Demo01If {
	
	public static void main(String[] args) {
		System.out.println("AAA");
		int age = 16;
		if(age >= 18){
			System.out.println("BBB");
			System.out.println("CCC");
			System.out.println("DDD");
		}
		System.out.println("EEE");
	}
	
}
2.0 if语句第二种格式

if语句第二种格式:标准的if else语句

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

2.1 执行流程

1、首先判断关系表达式看其结果是true还是false
2、如果是true就执行语句体1
3、如果是false就执行语句体2

标准if-else语句的流程图

public class Demo02If {
	
	public static void main(String[] args) {
		int num = 20;
		if(num % 2 == 0){
			System.out.println("偶数");
		}else{
			System.out.println("奇数");
		}
	}
	
}
3.0 if语句第三种格式

if语句第三种格式: if…else if …else

if (判断条件1) { 
	执行语句1;
} else if (判断条件2) { 
	执行语句2; 
}
... 
}else if (判断条件n) { 
	执行语句n; 
} else { 
	执行语句n+1; 
}

执行流程首先判断关系表达式1看其结果是true还是false

1、如果是true就执行语句体1
2、如果是false就继续判断关系表达式2看其结果是true还是false
3、如果是true就执行语句体2
4、如果是false就继续判断关系表达式…看其结果是true还是false

n、如果没有任何关系表达式为true,就执行语句体n+1。

扩展if-else语句的流程图

练习

x和y的关系满足如下:
x>=3 y = 2x + 1;
‐1<=x<3 y = 2x;
x<=‐1 y = 2x – 1;
根据给定的x的值,计算出y的值并输出。

public class Demo03If {
	
	public static void main(String[] args) {
		int x = 10;
		int y;
		if(x >= 3){
			y = 2 * x + 1;
		}else if(-1 <= x && x<3){
			y = 2*x;
		} else {
			y = 2*x - 1;
		}
		System.out.println("y:"+y);
	}
	
}
4.0 练习

指定考试成绩,判断学生等级

90-100 优秀
80-89 好
70-79 良
60-69 及格
60以下 不及格

public class DemoPractice {
	
	public static void main(String[] args) {
		int score = 59;
		if(score >= 90 && score <=100){
			System.out.println("优秀");
		} else if( score >= 80 && score <90){
			System.out.println("好");
		} else if( score >= 70 && score < 80){
			System.out.println("良");
		} else if (score >= 60 && score < 70)
		{
			System.out.println("及格");
		} else if(score < 60) {
			System.out.println("不及格");
		} else{
			System.out.println("数据错误");
		}
	}
	
}
5.0 if语句和三元运算符的互换

使用三元运算符和标准的if else语句分别实现:取两个数的最大值

public class  Demo04If {
	
	public static void main(String[] args) {
		int a = 105;
		int b = 20;
		// 使用三元运算符
		// int max = a > b ? a : b;
		int max;
		if( a>b ){
			max = a;
		} else {
			max = b;
		}
		System.out.println("max:"+max);
	}
	
}

第03章 选择语句

选择语句–switch

1.0 switch语句格式
switch(表达式) { 
	case 常量值1: 
	语句体1; 
	break; 
	case 常量值2: 
	语句体2; 
	break; 
	... 
	default: 
	语句体n+1; 
	break; 
}
2.0 执行流程

1、首先计算出表达式的值
2、其次,和case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结 束。
3、最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。

switch语句图

3.0 注意事项

1、多个case后面的数值不可以重复
2、switch后小括号内的数据类型只能是以下类型:
基本类型:byte short int char
引用类型:String 字符串 enum 枚举
3、switch语句格式可以很灵活:前后顺序可以颠倒,匹配到哪个执行哪个,直到遇到break或执行结束
4、在switch语句中,如果case的后面不写break,将出现穿透现象,也就是不会在判断下一个case的值,直接向后运行,直到遇到break,或者整体switch结束。

4.0 使用场景

针对几个常量值的判断

//给定数字 判断是星期几 
public class DemoSwitch {
	
	public static void main(String[] args) {
		int num = 3;
		switch(num){
			case 1:
				System.out.println("星期一");
				break;
			case 2:
				System.out.println("星期二");
				break;
			case 4:
				System.out.println("星期四");
				break;
			case 3:
				System.out.println("星期三");
				break;			
			case 5:
				System.out.println("星期五");
				break;
			case 6:
				System.out.println("星期六");
				break;
			case 7:
				System.out.println("星期日");
				break;
			default:
				System.out.println("数据不合理...");
				break;
		}
	}
	
}

第04章 循环语句

1.0 循环概述

循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段被重复执行的代码被称为循环体语句,当反复执行这个循环体时,需要在合适的时候把循环判断条件修改为false,从而结束循环,否则循环将一直执行下去,形成死循环。

循环语句的组成,一般可以分为4各部分:
1、初始化语句,在循环开始最初执行,而且只做唯一一次
2、条件判断:如果成立,则循环继续,如果不成立,则退出循环
3、循环体:重复要做的事情,若干行语句.
4、步进语句:每次循环之后要进行的扫尾工作,每次循环之后都执行一次

2.0 循环语句1–for
2.1 for循环语句格式
for(初始化表达式①; 布尔表达式②; 步进表达式④){ 
	循环体③ 
}
2.2 执行流程

执行顺序:①②③④>②③④>②③④…②不满足为止。
①负责完成循环变量初始化
②负责判断是否满足循环条件,不满足则跳出循环
③具体执行的语句
④循环后,循环条件所涉及变量的变化情况

for循环的流程图

2.3 注意

判断条件语句的结果是一个boolean类型
循环体语句如果是一条语句,大括号可以省略;如果是多条语句,大括号不能省略。建议永远不要省略。
一般来说:有左大括号就没有分号,有分号就没有左大括号

/**
	需求:计算1-100之间的偶数和
 */

public class TestFor {
	
	public static void main(String[] args) {
		// 声明变量计数
		int sum = 0;
		for (int i = 1; i<=100; i++)
		{
			// 判断是否为偶数
			if (i % 2 == 0)
			{
				sum += i;
			}
		}
		System.out.println("sum:"+sum);
	}
	
}
3.0 循环语句2–while
3.1 while循环语句格式
初始化表达式① 
while(布尔表达式②){ 
	循环体③ 
	步进表达式④ 
}
3.2 执行流程

执行顺序:①②③④>②③④>②③④…②不满足为止。
①负责完成循环变量初始化。
②负责判断是否满足循环条件,不满足则跳出循环。
③具体执行的语句。
④循环后,循环变量的变化情况。

while循环的流程图

public class DemoWhile {
	
	public static void main(String[] args) {
		int i = 1;
		while(i<=10){
			System.out.println("Hello World!");
			i++;
		}
	}
	
}
4.0 循环语句3–do…while
4.1 do…while循环格式
初始化表达式① 
	do{ 
	循环体③ 
	步进表达式④ 
}while(布尔表达式②);
4.2 执行流程

执行流程执行顺序:①③④>②③④>②③④…②不满足为止。
①负责完成循环变量初始化。
②负责判断是否满足循环条件,不满足则跳出循环。
③具体执行的语句
④循环后,循环变量的变化情况

do...while循环语句格式图

4.3 注意

do…while循环的特点:无条件执行一次循环体,即使我们将循环条件直接写成false,也依然会循环一次。
这样的循环具有一定的风险性,因此初学者不建议使用do…while循环。

public class DemoDoWhile {
	
	public static void main(String[] args) {
		//for循环
		for (int i = 11; i <= 10; i++)
		{
			System.out.println("AAA" + i);
		}
		System.out.println("===================");
		
		//do while循环
		int i = 11;
		do{
			System.out.println("BBB" + i);
			i++;
		}while(i <= 10);	
	}
	
}
5.0 循环语句的区别

1、如果条件判断从来没有满足过,那么for循环和while循环将会执行0次,但是do-while循环至少执行一次
2、for循环的变量在小括号中定义,只有循环内部才可以使用。
while循环和do-while循环的初始化语句在外面,出循环之后还可以使用。
3、在已知循环次数的时候使用推荐使用for,循环次数未知的时推荐使用while。

注意:
写程序优先考虑for循环,再考虑while循环,最后考虑do…while循环。

public class DemoQuBie {
	
	public static void main(String[] args) {
		for (int i = 1; i<10; i++)
		{
			System.out.println("I: "+ i);
		}
		//	System.out.println("I: "+ i);

		int i = 11;
		do{
			System.out.println("对不起..."+i);
			i++;
		}while(i<=10);
		System.out.println("I: "+ i);
	}
	
}
6.0 跳出语句
6.1 break关键字

使用场景:终止switch或者循环

1.用在switch语句中,一旦执行,整个switch语句立刻结束。
2.用在循环语句中,一旦执行,整个循环立刻结束。

public class DemoBreak {
	
	public static void main(String[] args) {
		for (int i = 1; i<10; i++)
		{
			if (i == 4) // 如果i是4就不执行
			{
				break;
			}
			System.out.println("Hello "+i);
		}	
	}
	
}
6.2 Continue关键字

使用场景:结束本次循环,继续下一次的循环

public class DemoContinue {
	
	public static void main(String[] args) {
		for (int i = 1; i<10; i++)
		{
			if (i == 4) // 如果i是4就跳过本次循环,执行下次循环
			{
				continue;
			}
			System.out.println("Hello "+i);
		}
	}
	
}

第05章 扩展知识点

1.0 死循环

死循环:也就是循环中的条件永远为true,死循环的是永不结束的循环。例如:while(true){}。
在后期的开发中,会出现使用死循环的场景,例如:我们需要读取用户输入的输入,但是用户输入多少数据我们并 不清楚,也只能使用死循环,当用户不想输入数据了,就可以结束循环了,如何去结束一个死循环呢,就需要使用 到跳出语句了。

public class DemoDeadLoop {
	
	public static void main(String[] args) {
		while(true){
			System.out.println("AAA");
		}
	}
	
}
2.0 嵌套循环

所谓嵌套循环,是指一个循环的循环体是另一个循环。比如for循环里面还有一个for循环,就是嵌套循环。总 共的循环次数=外循环次数*内循环次数

2.1 嵌套循环格式
for(初始化表达式①; 循环条件②; 步进表达式⑦) { 
    for(初始化表达式③; 循环条件④; 步进表达式⑥) { 
    	执行语句⑤; 
    } 
}
2.2 嵌套循环执行流程

执行顺序:①②③④⑤⑥>④⑤⑥>⑦②③④⑤⑥>④⑤⑥
外循环一次,内循环多次。

public class DemoForFor {
	
	public static void main(String[] args) {
		for (int hour = 0; hour < 24; hour++)
		{
			for (int minute = 0; minute<60; minute++)
			{
				System.out.println(hour+"点"+minute+"分");
			}
		}
	}
	
}
3.0 扩展
3.1 水仙花数

需求:在控制台输出所有的“水仙花数”

解释:什么是水仙花数?
水仙花数是指一个三位数,个位 十位 百位的数字立方和等于原数。
例如:153 333 + 555 + 111 = 153

思路:
1.获取所有的三位数,准备进行筛选,最小的三位数100,最大的是999,使用for循环获取。
2.获取每一个三位数的个位 十位 百位,用if判断是否水仙花数。

public class PraticeShuiXianHua {
	
	public static void main(String[] args) {
		for (int i = 100; i<1000; i++)
		{
			// 获取每个三位数的个位 十位 百位 
			int ge = i % 10;
			int shi = i / 10 % 10;
			int bai = i / 100;
			if (ge*ge*ge + shi*shi*shi + bai*bai*bai == i)
			{
				// 水仙花数
				System.out.println(i);
			}
		}
	}
	
}
3.2 珠穆朗玛峰

需求:
世界最高的山峰是珠穆朗玛峰(8844.43米=8844430毫米),假如我有一张足够大的纸,他的厚度是0.1毫米。请问,折叠多少次,可以折成珠穆朗玛峰的高度?
分析:
因为要反复折叠,所以要使用循环,但是不知道要折叠多少次,这种情况下适合用while循环。
折叠过程中,当纸张的厚度大于珠穆朗玛峰的高度就停止,因此循环执行的要求是纸张厚度小于珠峰高度。

public class Pratice02WhileTest {
	
	public static void main(String[] args) {
		// 定义变量 计数器 初始值为0
		int count = 0;
		// 定义纸张厚度 
		double paper = 0.1;
		// 定义珠峰高度 
		int zhuMountain = 8844430;
		while(paper <= zhuMountain){
			// 折纸 每次折纸,纸张的厚度要加倍 
			paper *= 2;
			// 在循环中次数累加 
			count++;
		}
		System.out.println("需要折叠:"+ count +" 次");
	}
	
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小九说项目

记得私信我,得源码

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值