当前位置: 首页 > ops >正文

day06_java中的流程控制语句

流程控制语句

Java提供了一些流程控制语句,来控制程序的执行流程

顺序结构

  • 任何编程语言中最常见的程序结构就是顺序结构
  • 顺序结构就是程序从上到下逐行地执行,中间没有任何判断和跳转
  • 如果main方法的多行代码之间没有任何流程控制,则程序总是从上向下依次执行,排在前面的代码先执行,排在后面的代码后执行

执行流程图

 示例

public class Demo01Sequence {public static void main(String[] args) {//顺序执行,根据编写的顺序,从上到下运行System.out.println(1);System.out.println(2);System.out.println(3);System.out.println(4);}
}

分支结构之if语句

if语句第一种格式

执行流程

  1. 首先判断条件表达式看其结果是true还是false
  2. 如果是true就执行语句体
  3. 如果是false就不执行语句体
  4. 执行后续其他代码

执行流程图

代码示例

import java.util.Scanner;/*
案例:从键盘输入年份,请输出该年的2月份的总天数。闰年2月份29天,平年28天。闰年:(1)能被4整除,不能被100整除或者(2)能被400整除*/
public class Demo03If {public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("输入年份");int year = sc.nextInt();int day = 28;//判断是否是闰年if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {day++;}System.out.println(year + "年,2月" + day + "天");}
}

注意事项:

  • 当 if 分支结束后 会继续向下执行 
  • 如果大括号控制的只有一行代码,则大括号可以省略不写。只对第一行语句有效。强烈建议大家不要省略括号,可读性不好

if语句第二种格式

执行流程

  1. 首先判断关系表达式看其结果是true还是false
  2. 如果是true就执行语句体1
  3. 如果是false就执行语句体2
  4. 执行后续代码

执行流程图

代码示例

public static void main(String[] args){// 判断给定的数据是奇数还是偶数// 定义变量int a = 1;if(a % 2 == 0) {System.out.println("a是偶数");} else{System.out.println("a是奇数");}System.out.println("结束");
}

在某些简单的应用中,if语句是可以和三元运算符互换使用的

public static void main(String[] args) {int a = 10;int b = 20;//定义变量,保存a和b的较大值int max;if(a > b) {max = a;} else {max = b;}//可以上述功能改写为三元运算符形式max = a > b ? a : b;
}

 if语句第三种格式

执行流程

  1. 先判断条件1的值,如果为true则执行语句体1,分支结束;
  2. 如果为false则判断条件2的值 如果值为true就执行语句体2,分支结束;
  3. 如果为false则判断条件3的值 ...
  4. 如果没有任何条件为true,就执行else分支的语句体n+1

执行流程图

代码示例

package sgg.demo01;import java.util.Scanner;
/*
通过指定考试成绩,判断学生等级90-100       优秀80-89        好70-79        良60-69        及格60以下        不及格*/
public class Demo05If {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int score = sc.nextInt();if (score < 0 || score > 100) {System.out.println("你的成绩是错误的");} else 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 {System.out.println("你的成绩属于不及格");}}
}

if..els嵌套

在if的语句块中,或者是在else语句块中, 又包含了另外一个条件判断(可以是单分支、双分支、多分支)

执行的流程

  1. 如果是嵌套在if语句块中的 只有当外部的if条件满足,才会去判断内部的条件
  2. 如果是嵌套在else语句块中的 只有当外部的if条件不满足,进入else后,才会去判断内部的条件

 示例

public class Demo06If {public static void main(String[] args) {int score =100;if (score < 0 || score > 100) {System.out.println("你的成绩是错误的");} else {if (score >= 90) {System.out.println("你的成绩属于优秀");} else if (score >= 80) {System.out.println("你的成绩属于好");} else if (score >= 70) {System.out.println("你的成绩属于良");} else if (score >= 60) {System.out.println("你的成绩属于及格");} else {System.out.println("你的成绩属于不及格");}}}
}

分支结构之switch语句

语法格式:

执行过程:  

  1. 先执行表达式的值,拿着这个值去与case后的值进行匹配
  2. 匹配哪个case的值为true就执行哪个case里面的语句,遇到break就跳出switch分支
  3. 如果case后的值都不匹配则寻找default分支进入,不管default在哪里

注意事项

  • switch(表达式)的值的类型,只能是:4种基本数据类型(byte,short,int,char),两种引用数据类型(JDK1.5之后枚举、JDK1.7之后String
  • case后面必须是常量值,而且不能重复

case的穿透性

在switch语句中,如果case的后面不写break,将出现穿透现象,也就是一旦匹配成功,不会在判断下一个case的值,直接向后运行,直到遇到break或者整个switch语句结束,switch语句执行终止。

代码示例

import java.util.Scanner;/** 需求:输入一个月份,输出该月份对应的季节。* 		一年有四季* 		3,4,5	春季* 		6,7,8	夏季* 		9,10,11	秋季* 		12,1,2	冬季*/
public class Demo07Switch {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int month = sc.nextInt();switch (month) {case 3:case 4:case 5:System.out.println(month + "月是春季");break;case 6:case 7:case 8:System.out.println(month + "月是夏季");break;case 9:case 10:case 11:System.out.println(month + "月是秋季");break;case 12:case 1:case 2:System.out.println(month + "月是冬季");break;default:System.out.println("错误月份");}}
}

循环介绍

循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段被重复执行的代码被称为循环体语句。我们可以通过修改循环变量使得循环判断条件为false,从而结束循环,否则循环将一直执行下去,形成死循环。

循环结构之while语句

while循环语句格式:

执行流程:

  • 第一步:执行初始化语句①,完成循环变量的初始化;
  • 第二步:执行循环条件语句②,看循环条件语句的值是true,还是false;
    • 如果是true,执行第三步;
    • 如果是false,循环语句中止,循环不再执行。
  • 第三步:执行循环体语句③
  • 第四步:执行迭代语句④,针对循环变量重新赋值
  • 第五步:根据循环变量的新值,重新从第二步开始再执行一遍

代码示例

//需求 输出 1~100内偶数
public class Demo01While {public static void main(String[] args) {//1.起始点 初始化条件 ①int i = 1;//循环条件②while (i < 101) {//循环体③if (i % 2 == 0) {System.out.println(i);}//迭代条件④i++;}System.out.println("程序结束");}
}

循环结构之do...while语句

do...while循环语句格式

执行流程:

  • 第一步:执行初始化语句①,完成循环变量的初始化;
  • 第二步:执行循环体语句②;
  • 第三步:执行迭代语句③,针对循环变量重新赋值;
  • 第四步:执行循环条件语句④,看循环条件语句的值是true,还是false;
    • 如果是true,根据循环变量的新值,重新从第二步开始再执行一遍;
    • 如果是false,循环语句中止,循环不再执行。

 代码示例

package sgg.demo01;import java.util.Random;
import java.util.Scanner;/*
随机生成一个100以内的数,猜数字游戏从键盘输入数,如果大了提示,大了,如果小了,提示小了,如果对了,就不再猜了,并统计一共猜了多少次*/
public class Demo03DoWhile {public static void main(String[] args) {Random random = new Random();//随机生成一个100以内的整数int i = random.nextInt(100) + 1;//声明一个变量,用来存储猜的次数int count = 0;Scanner sc = new Scanner(System.in);int number;//提升作用域do {System.out.println("输入要你要猜的数字 1 -  100");number = sc.nextInt();//输入一次,就表示猜了一次count++;//判断输入的数字和随机生成的数字if (i > number) {System.out.println("输入的数字小了");} else if (i < number) {System.out.println("输入的数字大了了");}} while (number != i);System.out.println("猜对了,一共猜了:" + count + "次");}
}

循环结构之for语句

for循环语句格式:

执行流程:

  • 第一步:执行初始化语句①,完成循环变量的初始化;
  • 第二步:执行循环条件语句②,看循环条件语句的值是true,还是false;
    • 如果是true,执行第三步;
    • 如果是false,循环语句中止,循环不再执行。
  • 第三步:执行循环体语句③
  • 第四步:执行迭代语句④,针对循环变量重新赋值
  • 第五步:根据循环变量的新值,重新从第二步开始再执行一遍

 代码示例

package sgg.demo01;/** 练习:求出1-100之间偶数和**/
public class Demo04For {public static void main(String[] args) {//定义求和变量,初始化值是0int sum = 0;//获取1-100之间的数据,用for循环实现for (int x = 1; x <= 100; x++) {//把获取到的数据进行判断,看是否是偶数if (x % 2 == 0) {sum += x;}}//输出求和结果System.out.println("sum:" + sum);}}

循环语句的区别

从循环次数角度分析

  • do...while循环至少执行一次循环体语句
  • for和while循环先循环条件语句是否成立,然后决定是否执行循环体,至少执行零次循环体语句

从循环变量的生命周期角度分析

  • for循环的循环变量在for()中声明的,在循环语句结束后,不可以被访问;
  • while和do...while循环的循环变量因为在外面声明的,所以while和do...while结束后可以被继续使用的;

如何选择

  • 遍历有明显的循环次数(范围)的需求,选择for循环
  • 遍历没有明显的循环次数(范围)的需求,循环while循环
  • 如果循环体语句块至少执行一次,可以考虑使用do...while循环

本质上:三种循环之间是可以互相转换的,都能实现循环的功能

嵌套循环

  • 所谓嵌套循环,是指一个循环的循环体是另一个循环。比如for循环里面还有一个for循环,就是嵌套循环。总共的循环次数=外循环次数*内循环次数。当然可以是三种循环任意互相嵌套。

最常见的嵌套循环格式

执行流程

代码示例

/*
输出下面图形12 23 3 34 4 4 45 5 5 5 5
*/public class Demo09ForFor {public static void main(String[] args) {for (int i = 0; i < 5; i++) {//控制几行for (int j = 0; j <= i; j++) {//控制每行多少列System.out.print(i+1+"\t");//输出具体数据}System.out.println();//换行}}
}

控制语句break

使用场景:

  • 只能在switch语句和循环中使用,离开使用场景的存在是没有意义的

作用:

  • 终止switch语句或者当前循环

代码示例

import java.util.Scanner;//案例:从键盘输入不断输入整数,输入0表示结束,统计一共有几个正数、负数。
public class Demo05Break {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int positive = 0;int negative = 0;while (true) {System.out.println("输入数字");int number = sc.nextInt();if (number > 0) {positive++;} else if (number < 0) {negative++;} else {break;}}System.out.println("正数个数:" + positive);System.out.println("负数个数:" + negative);}
}

我们可以使用标记指定结束哪个循环

public class Demo06Test {public static void main(String[] args) {out:for (int i = 0; i < 3; i++) {for (int j = 1; j < 4; j++) {if (j==3){break out;}System.out.print(j+"\t");}System.out.println();}}
}/*
输出结果
1 2
*/

控制语句continue

使用场景

  • 只能使用在循环中

作用

  • 结束本次循环,继续下一次的循环

代码示例

public class Demo07Test {public static void main(String[] args) {//打印1-100之间的整数,跳过7的倍数和7结尾的数for (int i = 1; i <= 100; i++) {if (i % 7 == 0 || i % 10 == 7) {continue;}System.out.println(i);}}
}

continue也可以配合标记使用,控制指定的循环

public class Demo08Test {public static void main(String[] args) {a: for (int i = 0; i < 5; i++) {for (int j = 0; j < 5; j++) {if (j == 2){continue a;}System.out.print(j+"\t");}System.out.println();}}
}/*
执行结果0	1	0	1	0	1	0	1	0	1	*/
http://www.xdnf.cn/news/5665.html

相关文章:

  • Milvus 2.4 使用详解:从零构建向量数据库并实现搜索功能(Python 实战)
  • 力扣-138.随机链表的复制
  • js fetch流式请求 AI动态生成文本,实现逐字生成渲染效果
  • 个人博客系统测试报告
  • 常用激活函数总结
  • websocketpp 安装及使用
  • 基于OpenCV的人脸识别:Haar级联分类器
  • SATA—Link层状态机
  • Gmssl库的aes算法效率问题
  • 家具制造行业的现状 质检LIMS如何赋能家具制造企业质检升级
  • 见多识广7:KAIST(韩国高等科学技术院)——关注AI加速器方向
  • 复盘与导出工具最新版V23.0版本更新--新增韭菜异动轮动功能
  • 基于 Python 的后端开发学习路线
  • 【AI】mcp server是什么玩意儿
  • 【Linux网络】 HTTP cookie与session
  • DeepPrep:深度学习提升神经影像预处理
  • LeetCode算法题:电话号码的字母组合
  • Bodhi linux 系统详解
  • 分析红黑树工程实用的特点
  • 智能手表测试计划文档(软/硬件)
  • 读取.ini后缀类型的马达配置文件并进行赋值
  • AtCoder Beginner Contest 405(ABCD)
  • 搭建高可用及负载均衡的Redis
  • C++四种类型转换:static_cast、 dynamic_cast const cast、 reinterpret_cast
  • 详解RabbitMQ工作模式之通配符模式
  • 3.9/Q2,GBD数据库最新文章解读
  • 珠海金山2007逆向分析挑战赛-CrackMe看雪(九连环)(writeup)
  • 【运维】MacOS蓝牙故障排查与修复指南
  • 大地网接地电阻测试的必要性
  • Python如何使用进行风险管理和投资组合优化