六、Java程序控制结构

文章目录


程序控制结构

提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、程序流程控制介绍

在程序中,程序运行的流程控制决定程序是如何执行的,是我们必须掌握的,主要有三大流程控制语句。

  1. 顺序控制
  2. 分支控制
  3. 循环控制

二、顺序控制

在这里插入图片描述

三、分支控制 if-else

1. 分支控制 if-else 介绍

让程序有选择的的执行,分支控制有三种

  1. 单分支 if
  2. 双分支 if-else
  3. 多分支 if-else if -…-else

2. 单分支

基本语法

if(条件表达式){
	执行代码块;(可以有多条语句.)
}

说明:当条件表达式为ture时,就会执行{}的代码。如果为false ,就不执行.特别说明,如果0中只有一条语句,则可以不用{}.建议写上{}

//if 的快速入门
import java.util.Scanner;//导入
public class If01 {
	//编写一个 main 方法
	public static void main(String[] args) {
		//编写一个程序,可以输入人的年龄,如果该同志的年龄大于 18 岁, //则输出 "你年龄大于 18,要对自己的行为负责,送入监狱"
		//
		//思路分析
		//1. 接收输入的年龄, 应该定义一个 Scanner 对象
		//2. 把年龄保存到一个变量 int age
		//3. 使用 if 判断,输出对应信息
		//应该定义一个 Scanner 对象
		Scanner myScanner = new Scanner(System.in);
		System.out.println("请输入年龄");
		//把年龄保存到一个变量 int age
		int age = myScanner.nextInt();
		//使用 if 判断,输出对应信息
		if(age > 18) {
		System.out.println("你年龄大于 18,要对自己的行为负责,送入监狱");
		}
		System.out.println("程序继续...");
	}
}

在这里插入图片描述

四、双分支

基本语法

if(条件表达式){
	执行代码块1;
}else{
	执行代码块2;
}

说明:当条件表达式成立,即执行代码块1,否则执行代码块2.如果执行代码块只有一条语句,则可以省略,否则,不能省略

//if-else 的快速入门
import java.util.Scanner;//导入
public class If02 {
	//编写一个 main 方法
	public static void main(String[] args) {
		//编写一个程序,可以输入人的年龄,如果该同志的年龄大于 18 岁, //则输出 "你年龄大于 18,要对
		//自己的行为负责, 送入监狱"。否则 ,输出"你的年龄不大这次放过你了."
		//
		//思路分析
		//1. 接收输入的年龄, 应该定义一个 Scanner 对象
		//2. 把年龄保存到一个变量 int age
		//3. 使用 if-else 判断,输出对应信息
		//应该定义一个 Scanner 对象
		Scanner myScanner = new Scanner(System.in);
		System.out.println("请输入年龄");
		//把年龄保存到一个变量 int age
		int age = myScanner.nextInt();
		//使用 if-else 判断,输出对应信息
		if(age > 18) {
		System.out.println("你年龄大于 18,要对自己的行为负责,送入监狱");
		} else {//双分支
		System.out.println("你的年龄不大这次放过你了");
		}
		System.out.println("程序继续...");
	}
}

1.双分支

在这里插入图片描述

2. 多分支

基本语法

if(条件表达式1){
	执行代码块1;
}
else if(条件表达式2){
	执行代码块2;
}
………
else{
	执行代码块n;
}

特别说明:

  1. 多分支可以没有else,如果所有的条件表达式都不成立,则一个执行入口都没有
  2. 如果有else ,如果所有的条件表达式都不成立,则默认执行else代码块

3. 多分支的流程图(重要!)

在这里插入图片描述

五、嵌套分支

1. 基本介绍

在一个分支结构中又完整的嵌套了另一个完整的分支结构,里面的分支的结构称为内层分支外面的分支结构称为外
层分支。老师建议: 不要超过 3 层 (可读性不好)

2. 基本语法

if(){
	if(){
		//if-else
	}else{
		//if-else
	}
}

六、switch 分支结构

1. 基本语法

在这里插入图片描述

2. 流程图

在这里插入图片描述

3. 快速入门

案例:Switch01.java
请编写一个程序,该程序可以接收一个字符,比如:a,b,c,d,e,f,g
a 表示星期一,b 表示星期二 …根据用户的输入显示相应的信息.要求使用 switch 语句完成代码

import java.util.Scanner;
public class Switch01 {
	//编写一个 main 方法
	public static void main(String[] args) {
		/*
		案例:Switch01.java
		请编写一个程序,该程序可以接收一个字符,比如:a,b,c,d,e,f,g
		a 表示星期一,b 表示星期二 …
		根据用户的输入显示相应的信息.要求使用 switch 语句完成
		思路分析
		1. 接收一个字符 , 创建 Scanner 对象
		2. 使用 switch 来完成匹配,并输出对应信息
		代码
		*/
		Scanner myScanner = new Scanner(System.in);
		System.out.println("请输入一个字符(a-g)");
		char c1 = myScanner.next().charAt(0);//
		//在 java 中,只要是有值返回,就是一个表达式
		switch(c1) {
		case 'a' :
		System.out.println("今天星期一,猴子穿新衣");
		break;
		case 'b' :
		System.out.println("今天星期二,猴子当小二");
		break;
		case 'c' :
		System.out.println("今天星期三,猴子爬雪山..");
		break;
		//..... default:
		System.out.println("你输入的字符不正确,没有匹配的");
		}
		System.out.println("退出了 switch ,继续执行程序");
	}
}

4. switch 注意事项和细节讨论

  1. 表达式数据类型,应和case后的常量类型一致,或者是可以自动转成可以相互比较的
  2. switch(表达式)中表达式的返回值必须是:(byte,short,int.char,enum[枚举],String)
double c = 1.1;
switch(c){//错误
	case 1.1 ://错误
		System.out.println( "ok3");
		break;
}
  1. case子句中的值必须是常量,而不能是变量
  2. default子句是可选的,当没有匹配的case时,执行default
  3. break语句用来在执行完一个case分支后使程序跳出switch语句块;如果没有写break,程序会顺序执行到switch结尾,除非遇到break;

5. switch 和 if 的比较

  1. 如果判断的具体数值不多,而且符合 byte、 short 、int、 char, enum[枚举], String 这 6 种类型。虽然两个语句都可
    以使用,建议使用 swtich 语句。
  2. 其他情况:对区间判断,对结果为 boolean 类型判断,使用 if,if 的使用范围更广

七、for 循环控制(!!!)

基本介绍:听其名而知其意,就是让你的代码可以循环的执行.

1. 看一个实际需求

请大家看个案例[For01.java]:编写一个程序, 可以打印 10 句 “你好,韩顺平教育!”。请大家想想怎么做?

2. 基本语法

for(循环变量初始化;循环条件;循环变量迭代){
	循环操作(可以多条语句);
}

说明

  1. .for 关键字,表示循环控制
  2. for 有四要素: (1)循环变量初始化(2)循环条件(3)循环操作(4)循环变量迭代
  3. 循环操作 , 这里可以有多条语句,也就是我们要循环执行的代码
  4. 如果 循环操作(语句) 只有一条语句,可以省略 {}, 建议不要省略

3. for 循环执行流程分析在这里插入图片描述

4. 注意事项和细节说明

  1. 循环条件是返回一个布尔值的表达式
  2. for(;循环判断条件;) 中的初始化和变量迭代可以写到其它地方,但是两边的分号不能省略。
  3. 循环初始值可以有多条初始化语句,但要求类型一样,并且中间用逗号隔开,循环变量迭代也可以有多条变量迭代语句,中间用逗号隔开。
    在这里插入图片描述

八、while 循环控制

1. 基本语法

循环变量初始化:

while(循环条件){
	循环体(语句);
	循环变量迭代;
}

说明:

  1. while循环也有四要素
  2. 只是四要素放的位置和for不一样

2.while 循环执行流程分析在这里插入图片描述

//while 循环的案例
//
public class While01 {
	//编写一个 main 方法
	public static void main(String[]
		//输出 10 句 你好,韩顺平教育
		int i = 1; //循环变量初始化
		while( i <= 10 ) {//循环条件
		System.out.println("你好,韩顺平教育" + i);//执行语句
		i++;//循环变量迭代
		}
		System.out.println("退出 while ,继续.." + i); // 11
	}
}

3. 代码执行内存分析图在这里插入图片描述

4. 注意事项和细节说明

  1. 循环条件是返回一个布尔值的表达式
  2. while 循环是先判断再执行语句

九、do…while 循环控制

1. 基本语法

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

2. 说明:

  1. do while 是关键字
  2. 也有循环四要素, 只是位置不一样
  3. 先执行,再判断,也就是说,一定会至少执行一次
  4. 最后 有一个 分号 ;
  5. while 和 do…while 区别举例: 要账

3. do…while 循环执行流程分析

在这里插入图片描述
在这里插入图片描述

4. 注意事项和细节说明

  1. 循环条件是返回一个布尔值的表达式
  2. do…while 循环是先执行,再判断, 因此它至少执行一次

十、多重循环控制(难点! 重点!)

1. 介绍

  1. 将一个循环放在另一个循环体内,就形成了嵌套循环。其中,for ,while ,do…while 均可以作为外层循环和内层循环。【建议一般使用两层,最多不要超过 3 层, 否则,代码的可读性很差】
  2. 实质上,嵌套循环就是把内层循环当成外层循环的循环体。当只有内层循环的循环条件为 false 时,才会完全跳出内层循环,才可结束外层的当次循环,开始下一次的循环
  3. 设外层循环次数为 m 次,内层为 n 次,则内层循环体实际上需要执行 m*n 次。在这里插入图片描述

2. 多重循环执行步骤分析:

在这里插入图片描述

3. 经典的打印金字塔

使用 for 循环完成下面的案例
请编写一个程序,可以接收一个整数,表示层数(totalLevel),打印出金字塔

public class Stars {
	//编写一个 main 方法
	public static void main(String[] args) {
		/*
		*
		* *
		* *
		********
		思路分析
		化繁为简
		1. 先打印一个矩形
		*****
		*****
		*****
		*****
		*****
		2. 打印半个金字塔
		* //第 1 层 有 1 个*
		** //第 2 层 有 2 个*
		*** //第 3 层 有 3 个*
		**** //第 4 层 有 4 个*
		***** //第 5 层 有 5 个*
		3. 打印整个金字塔
		* //第 1 层 有 1 个* 2 * 1 -1 有 4=(总层数-1)个空格
		*** //第 2 层 有 3 个* 2 * 2 -1 有 3=(总层数-2)个空格
		***** //第 3 层 有 5 个* 2 * 3 -1 有 2=(总层数-3)个空格
		******* //第 4 层 有 7 个* 2 * 4 -1 有 1=(总层数-4)个空格
		********* //第 5 层 有 9 个* 2 * 5 -1 有 0=(总层数-5)个空格
		4. 打印空心的金字塔 [最难的]
		* //第 1 层 有 1 个* 当前行的第一个位置是*,最后一个位置也是*
		* * //第 2 层 有 2 个* 当前行的第一个位置是*,最后一个位置也是*
		* * //第 3 层 有 2 个* 当前行的第一个位置是*,最后一个位置也是*
		* * //第 4 层 有 2 个* 当前行的第一个位置是*,最后一个位置也是*
		********* //第 5 层 有 9 个* 全部输出*
		5 层数做成变量 int totalLevel = 5;
		//小伙伴 技术到位,就可以很快的把代码写出
		*/
		int totalLevel = 20; //层数
		for(int i = 1; i <= totalLevel; i++) { //i 表示层数
			//在输出*之前,还有输出 对应空格 = 总层数-当前层
			for(int k = 1; k <= totalLevel - i; k++ ) {
				System.out.print(" ");
			}
			//控制打印每层的*个数
			for(int j = 1;j <= 2 * i - 1;j++) {
			//当前行的第一个位置是*,最后一个位置也是*, 最后一层全部 *
				if(j == 1 || j == 2 * i - 1 || i == totalLevel) {
					System.out.print("*");
				} else { //其他情况输出空格
					System.out.print(" ");
				}
			}
				//每打印完一层的*后,就换行 println 本身会换行
				System.out.println("");
		}
	}
}

十一、跳转控制语句-break

1. 看下面一个需求

随机生成 1-100 的一个数,直到生成了 97 这个数,看看你一共用了几次?
提示使用 (int)(Math.random() * 100) + 1
思路分析:
循环,但是循环的次数不知道. -> break ,当某个条件满足时,终止循环
通过该需求可以说明其它流程控制的必要性,比如 break

2. 基本介绍:

break 语句用于终止某个语句块的执行,一般使用在 switch 或者循环[for , while , do-while]中

3. 基本语法:

{ ……
break; ……
}

4. 以 while 使用 break 为例,画出示意图

在这里插入图片描述

5. 快速入门:

在这里插入图片描述

6. 注意事项和细节说明:

在这里插入图片描述

十二、跳转控制语句-continue

1. 基本介绍:

  1. continue 语句用于结束本次循环,继续执行下一次循环。
  2. continue 语句出现在多层嵌套的循环语句体中时,可以通过标签指明要跳过的是哪一层循环 , 这个和前面的标签的
    使用的规则一样.

2. 基本语法:

{ ……
continue; ……
}

3. 以 while 使用 continue 为例,画出示意图

在这里插入图片描述

4. 快速入门案例

在这里插入图片描述

5. 细节案例分析和说明:

label1:
for(int j = 0; j < 4; j++){
	label2:
	for(int i = 0; i < 10; i++){
		if(i == 2){
		//看看分别输出什么值,并分析
		//continue ;
		//continue label2;
		continue label1;
	}
	System.out.println("i = " + i);
}

十三、跳转控制语句-return

return 使用在方法,表示跳出所在的方法,在讲解方法的时候,会详细的介绍,这里我们简单的提一下。注意:如果 return 写在 main 方法,退出程序…Return01.java
在这里插入图片描述


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值