疯狂Java讲义——第4章 流程控制与数组

目录

​编辑

一.流程控制

1.顺序结构

2.分支结构

(1).if条件语句

(2).switch语句


一.流程控制

1.顺序结构

任何编程语言中最常见的程序结构就是顺序结构,顺序结构就是从上到下逐行执行,中间没有任何判断和跳转

如果Main方法的多行代码之间没有任何流程控制,则程序总从上向下依次执行,排在前面的先执行,排在后面的后执行。

public class Order {
    public static void main(String[] args) {
        int a=1;
        int b=2;
        int c=a+b;
        System.out.println(1);
        System.out.println(2);
        System.out.println(3);
        System.out.println(a);
        System.out.println(b);
        System.out.println(c);
    }
}

2.分支结构

Java提供了两种常见的分支结构:if语句和switch语句

if语句使用布尔表表达式或布尔值作为分支条件来进行分支控制;

switch语句则用于对多个整型值进行匹配,从而实现分支控制;

(1).if条件语句

if语句使用布尔表达式或布尔值作为分支条件来进行分支控制;

if语句有以下三种形式:单分支结构,双分支结构,多分支结构
单分支结构的语法格式:
if (条件表达式) {
语句体;
}

执行流程:条件为真进入执行代码,条件为假不进入不执行代码。

双分支结构的语法格式:
if (条件表达式) {
语句体 1;
} else {
语句体 2;
}

执行流程:条件为真进入 if 执行代码语句体 1,条件为假进入 else 执行代码语句体 2

多分支结构的语法格式:
if (条件表达式 1) {
语句体 1;
} else if (条件表达式 2)
{
语句体 2;
} else if (条件表达式 3)
{
语句体 3;
}. . .
else {
语句体 n;
}

执行流程:条件为真进入if 执行代码语句体 1,条件为假进入 else if 并且判断条件是否为真,为真执行代码 语句体2,条件为假进 入 else 执行代码。

注意:前面都为假就执行 else 中的代码

(2).switch语句

switch语句由一个控制表达式和多个case标签组成

switch(表达式){
    case 值 1:
        执行代码...;
        break;
    case 值 2:
        执行代码...;
        break; ...
    case 值 n-1:
        执行代码...;
        break;
    default:
    执行代码 n;
}

分支的执行流程:

先执行表达式的值,再拿着这个值去与 case 后的值进行匹配。

与哪个 case 后的值匹配为 true 就执行哪个 case 块的代码,遇到 break 就跳出 switch 分支。

如果全部 case 后的值与之匹配都是 false,则执行 default 块的代码;

示例:

java 复制代码
public class CaseBlockTest
{
	public static void main(String[] args)
	{
		// 声明变量season
		var season = "秋天";
		// 执行switch分支语句
		switch (season)
		{
			case "春天", "夏天" -> {
				System.out.println("春夏不是读书天.");
				// 定义count变量,该变量仅在该case块中有效
				int count = 20;
				System.out.println(count);
			}
			case "秋天", "冬天" -> {
			   System.out.println("秋多蚊蝇冬日冷.");
				// 再次定义count变量,不会与前面的count变量冲突
				int count = 30;
				System.out.println(count);
			}
			default -> {
				System.out.println("读书只好等明年!");
//				System.out.println(count); // 报错,找不到count变量
			}
		}
//		System.out.println(count); // 报错,找不到count变量
	}
}

Java17的新式switch语句:

为了简化switch语句的写法,Java17引入了一种新的switch语句,同时还可作为表达式使用。

java 复制代码
switch{
case value1->表达式、代码块
case value2、value3->表达式、代码块
···
case valueN->表达式、代码块
default->表达式、代码块
}
java 复制代码
public class SwitchExprTest
{
	public static void main(String[] args)
	{
		// 声明变量score,并为其赋值为'C'
		var score = 'C';
		// 将switch表达式的值赋值给变量
		var judge = switch (score)
		{
			// case后的箭头后是一个表达式
			case 'A', 'B' -> "成绩还不错,希望继续保持";
			case 'C', 'D', 'F' -> "成绩不足,还需努力!";
			default -> "成绩输入错误";
		};
		System.out.println(judge);

		var judge2 = switch (score)
		{
			// case后的代码块有多条语句,使用yield返回值
			case 'A', 'B' -> {
				System.out.println("成绩还不错,希望继续保持");
				yield "优良";
			}
			// case后的代码块有多条语句,使用yield返回值
			case 'C', 'D', 'F' -> {
				System.out.println("成绩不足,还需努力!");
				yield "不足";
			}
			default -> "成绩输入错误";
		};
		System.out.println(judge2);

		var judge3 = switch (score)
		{
			// case后的代码块有多条语句,使用yield返回值
			case 'A', 'B':
				System.out.println("成绩还不错,希望继续保持");
				yield "优良";
			// 传统case后即使只有一条语句,也需要使用yield返回值
			case 'C', 'D', 'F':
				yield "不足";
			default:
				yield "成绩输入错误";
		};
		System.out.println(judge3);
	}
}

使用 switch 分支的几点注意事项:

表达式类型只能是 byte、short、int、char,JDK5 开始支持枚举,JDK7 开始支持 String、不支持 double、float、long

case 给出的值不允许重复,且只能是字面量,不能是变量

正常使用 switch 的时候,不要忘记写 break,否则会出现穿透现象

当存在多个 case 分支的代码相同时,可以把相同的代码放到一个 case 块中,其他的 case 块都通过穿透性穿透到该 case 块执行代码即可,这样可以简化代码。

if、switch 的比较,以及各自适合什么业务场景?
  • if 在功能上远远强大于 switch
  • 当前条件是区间的时候,应该使用 if 分支结构
  • 当条件是与一个一个的值比较的时候,switch 分支更合适:格式良好,性能较好,代码优雅

(3).循环结构

for循环

for 循环:控制一段代码反复执行很多次。

for 循环语法格式:

for (初始化语句; 循环条件; 迭代语句) {
循环体语句(重复执行的代码);
}

//例如:

// 输出 3 次 Hello World

for (int i = 0; i < 3; i++) {

System.out.println("Hello World");

}

while 循环:

初始化语句;
while (循环条件) {
循环体语句(被重复执行的代码);
迭代语句;
}

//例如:

int i = 0;

while (i < 3) {

System.out.println("Hello World");

i++;

}

do-while 循环

初始化语句;
do {
循环体语句;
迭代语句;
} while (循环条件);

//例如:

int i = 0;

do {

System.out.println("Hello World!");

i++;

} while( i < 3);

三种循环的区别小结

for 循环 和 while 循环(先判断后执行); do...while (先执行后判断)

for 循环和 while 循环的执行流程是一模一样的,功能上无区别,for 能做的 while 也能做,反之亦然。

使用规范:如果已知循环次数建议使用 for 循环,如果不清楚要循环多少次建议使用while 循环。

其他区别:for 循环中,控制循环的变量只在循环中使用。while 循环中,控制循环的变量在循环后还可以继续使用

二.数组类型

数组是编程语言中最常见的一种数据结构,可用来存储多个数据,每个数组元素存放一个数据,通常可通过数组元素的索引来访问数组元素。

数组也是一种引用类型,例如int是一种基本类型。但int[ ]就是一个引用类型;

1.定义数组

后面的明天写!!!!!!!!!

相关推荐
Algorithm15769 分钟前
云原生相关的 Go 语言工程师技术路线(含博客网址导航)
开发语言·云原生·golang
shinelord明18 分钟前
【再谈设计模式】享元模式~对象共享的优化妙手
开发语言·数据结构·算法·设计模式·软件工程
新手小袁_J23 分钟前
JDK11下载安装和配置超详细过程
java·spring cloud·jdk·maven·mybatis·jdk11
呆呆小雅24 分钟前
C#关键字volatile
java·redis·c#
Monly2125 分钟前
Java(若依):修改Tomcat的版本
java·开发语言·tomcat
boligongzhu26 分钟前
DALSA工业相机SDK二次开发(图像采集及保存)C#版
开发语言·c#·dalsa
Eric.Lee202126 分钟前
moviepy将图片序列制作成视频并加载字幕 - python 实现
开发语言·python·音视频·moviepy·字幕视频合成·图像制作为视频
Ttang2327 分钟前
Tomcat原理(6)——tomcat完整实现
java·tomcat
7yewh28 分钟前
嵌入式Linux QT+OpenCV基于人脸识别的考勤系统 项目
linux·开发语言·arm开发·驱动开发·qt·opencv·嵌入式linux
钱多多_qdd38 分钟前
spring cache源码解析(四)——从@EnableCaching开始来阅读源码
java·spring boot·spring