Java流程控制的陷阱

文章目录

  • 1. switch中break的作用
  • 2. switch支持的数据类型
  • 3. else隐含的条件
  • 4. 省略花括号的陷阱
  • 5. for循环的结构
  • 6. 使用标签跳出双层for循环

流程控制三种:顺序结构、分支结构、循环结构
分支机构两种:if语句、switch语句
循环结构:while循环、do while循环、for循环、foreach循环

1. switch中break的作用

break用来终止执行,而case匹配一旦匹配到就不再判断之后的case条件、default是否匹配

case标签的条件值不能重复,否则会报错

在这里插入图片描述

case 语句中如果不带break,匹配到一个case后,下面的不再匹配,都会执行,除非遇到break

情况1:完全没有break语句,那么从匹配的case块开始,后面的case块、default块代码都会执行

在这里插入图片描述

情况2:后面的case块有break,整个switch块结束

在这里插入图片描述

使用javac -Xlint:fallthrough,编译器编译时switch中若缺少break会给出警告

2. switch支持的数据类型

  • byte
  • short
  • int
  • char
  • enum
  • String
  • 上面基础类型的包装类也是支持的

枚举示例

    public static void testSwitch() {YesNoEnum yesNoEnum = YesNoEnum.NO;switch(yesNoEnum) {case NO:System.out.println("NO");break;case YES:System.out.println("YES");break;default:System.out.println("default");}}

3. else隐含的条件

  • else的字面意义是“否则”,隐含的条件是前面条件都不符合。
  • else if的条件 = if显示条件 && else隐式条件(前面条件都不符合)
    public static void main(String[] args) {int age = 45;if (age > 20) {System.out.println("青年人");} else if (age > 40) {System.out.println("中年人");} else if (age > 60) {System.out.println("老年人");}}

打印执行

>

45岁是青年人,明显不对,上面逻辑有问题

因为上面的代码等同于下面的代码

    public static void main(String[] args) {int age = 45;if (age > 20) {System.out.println("青年人");} else if (age > 40 && !(age > 20)) {System.out.println("中年人");} else if (age > 60 && !((age > 20) && (age > 40 && !(age > 20)))) {System.out.println("老年人");}}

打印执行

在这里插入图片描述

正确写法

    public static void main(String[] args) {int age = 45;if (age > 60) {System.out.println("老年人");} else if (age > 40) {System.out.println("中年人");} else if (age > 20) {System.out.println("青年人");}}

打印执行

在这里插入图片描述

因为上面代码等同于

    public static void main(String[] args) {int age = 45;if (age > 60) {System.out.println("老年人");} else if (age > 40 && !(age > 60)) {System.out.println("中年人");} else if (age > 20 && !(age > 60) && !(age > 40 && !(age > 60))) {System.out.println("青年人");}}

打印执行

在这里插入图片描述

总结

  • 因为else总是先排除了之前的情况,所有if else每个分支都是互斥的,只可能走一个分支
  • 所以:先处理范围小的条件,再处理范围大的条件

4. 省略花括号的陷阱

如果if语句、while语句、for语句之后没有紧跟花括号,那么它们的作用范围到该语句之后的第一个分号结束

示例1:if 有花括号

在这里插入图片描述

示例1:if 无花括号

在这里插入图片描述

示例2:while有花括号

在这里插入图片描述

示例2:while无花括号:造成死循环

在这里插入图片描述

另:当循环体只有一条局部变量定义语句时,仍然不可以省略循环体的花括号

在这里插入图片描述

加上花括号就不报错了

在这里插入图片描述

5. for循环的结构

  • 根据java规范,for循环里有且只能有两个分号作为分隔符
  • 第一个分号之前的是初始化条件
  • 两个分号中间的部分是一个返回boolean的逻辑表达式,当它返回true时for循环才会执行下一次循环
  • 第二个分号之后的是循环迭代部分,每次循环结束后会执行循环迭代部分

示例

public class ForDemo {public static void main(String[] args) {for (int i = 0, j = 1; i < 5 && j < 20; i++, j *=2 ) {System.out.println("2的" + i + "次方 = " + j);}}
}

打印执行

在这里插入图片描述

6. 使用标签跳出双层for循环

break只是结束所在for循环

    private static void test2() {for (int i = 0; i < 5; i++) {for (int j = 0; j < 5; j++) {if (j == 2) {break;}System.out.println("i = " + i + ", j = " + j);}}}

打印执行:i值0、1、2、3、4都有,j值只有0、1,说明break只是结束了内层for循环

在这里插入图片描述

使用标签跳出双层for循环

跳出外层for循环

在这里插入图片描述

跳出内层for循环,跟break不加标签效果一样

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/603788.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JumpServer一键安装脚本

JumpServer 一键安装命令如下&#xff1a; curl -sSL https://resource.fit2cloud.com/jumpserver/jumpserver/releases/latest/download/quick_start.sh | bash上述quick_start.sh脚本详细内容如下&#xff1a; #!/usr/bin/env bash #VERSIONv3.10.1 DOWNLOAD_URLhttps://re…

【APACHE】的认识和基础配置参数

#主页传送:江南的江 #每日鸡汤&#xff1a;人生没有如果和假设&#xff0c;只有后果和结果。生活有进有退&#xff0c;输什么也不能输心情。生活简单就是迷人的&#xff0c;学会简单其实就是不简单。要学会平静地接受现实&#xff0c;学会对自己说声顺其自然&#xff0c;学会坦…

MS4553S用于开漏模式和推拉模式的 2bit 双向电平转换器,可替代TXS0102/PCA9306等

产品简述 MS4553S 是一款双向电平转换器&#xff0c;可以用作混合电压的数字信 号系统中。其使用两个独立构架的电源供电&#xff0c; A 端供电电压范围是 1.65V 到 5.5V &#xff0c; B 端供电电压范围是 2.3V 到 5.5V 。可用在电压为 1.8V 、 2.5V 、 3.3V 和 5V 的信号转…

C++系列十四:结构体

C中的结构体 一、结构体的定义 在C中&#xff0c;结构体是一种自定义的数据类型&#xff0c;它允许我们将不同类型的数据组合在一起。结构体可以包含任意类型的数据&#xff0c;包括基本数据类型、指针、数组、其他结构体等。 定义结构体的语法如下&#xff1a; struct 结构…

目前最完整的WebRTC资源平台 —— 筑梦之路

webrtcwork.com 是一个非常好的网站&#xff0c;笔者从那里获得了很多有价值的学习资源&#xff0c;比如服务器端压力测试&#xff0c;商业WebRTC部署等资料。 地址&#xff1a;webrtcwork - Resources for those working with WebRTC 做个笔记

如何用UE5 的小白人替换成自己的 metahumen 数字人

1、用QuixelBridge 插件导入制作好的metahumen数字人 2、创建项目时如有选择第三人称游戏&#xff0c;在内容目录中找到第三人称游戏小白人的蓝图类&#xff0c;对其进行复制一个&#xff0c;重命名&#xff0c;我这里命名为BP_METAHUMEN&#xff0c; 并移到Metahumen目录下方便…

安全基础~信息搜集3

文章目录 知识补充APP信息搜集php开发学习理解漏洞 知识补充 端口渗透总结 python Crypto报错&#xff1a;https://blog.csdn.net/five3/article/details/86160683 APP信息搜集 1. AppInfoScanner 移动端(Android、iOS、WEB、H5、静态网站)信息收集扫描工具 使用教程 演示&…

第三十八周周报:文献阅读 +BILSTM+GRU+Seq2seq

目录 摘要 Abstract 文献阅读&#xff1a;耦合时间和非时间序列模型模拟城市洪涝区洪水深度 现有问题 提出方法 创新点 XGBoost和LSTM耦合模型 XGBoost算法 ​编辑 LSTM&#xff08;长短期记忆网络&#xff09; 耦合模型 研究实验 数据集 评估指标 研究目的 洪…

适合前后端开发的可视化编辑器(拖拽控件)

分享一个面向研发人群使用的前后端分离的低代码软件——JNPF。 JNPF与市面上其他的低代码&#xff08;轻流、宜搭、微搭、简道云、轻流、活字格等等&#xff09;&#xff0c;后者更倾向于非编程人员使用&#xff0c;让业务线人员自行构建应用程序。而 JNPF 这款低代码产品是面向…

Linux学习记录——삼십유 传输层TCP协议(1)

文章目录 1、TCP协议报文1、报头和有效载荷的分离2、TCP可靠性3、序号和确认序号4、16位窗口大小5、6个标志位和紧急指针 2、TCP可靠性1、应答机制2、超时重传机制3、连接管理机制握手挥手 3、流量控制 1、TCP协议报文 UDP属于TCP/IP协议族。 1、报头和有效载荷的分离 从头…

1、Excel工作场景和知识点总结

参考&#xff1a; 戴师兄–戴你玩转数据分析 Excel发挥战斗力的场景 地量级数据的存储 我们日常所用的各种数据表格&#xff0c;基本都以excel的.xlsx或者.xls格式进行存储。并且因为大家电脑上都有excel&#xff0c;这就使excel的通用性很高(我用excel做好一个表发给你&#x…

uniapp选择android非图片文件的方案踩坑记录

这个简单的问题我遇到下面6大坑&#xff0c;原始需求是选择app如android的excel然后读取到页面并上传表格数据json 先看看效果 uniapp 选择app excel文件读取 1.uniapp自带不支持 uniapp选择图片和视频非常方便自带已经支持可以直接上传和读取 但是选择word excel的时候就出现…

设计模式篇章(3)——七种结构型模式

结构型设计模式主要思考的是如何将对象进行合理的布局来组成一个更大的功能体或者结构体&#xff0c;这个现在讲有点抽象&#xff0c;用大白话讲就是利用现有的对象进行组合或者配合&#xff0c;使得组合后的这个系统更加好。好是相对于不使用设计模式&#xff0c;按照自己的堆…

【小沐学CAD】开源Assimp库导入三维模型(C++、Python)

文章目录 1、简介2、下载编译3、代码测试3.1 C3.2 pyassimp&#xff08;Python&#xff09; 结语 1、简介 https://github.com/assimp/assimp Open Asset Import Library 是一个库&#xff0c;用于将各种 3D 文件格式加载为共享的内存格式。它支持 40 多种用于导入的文件格式和…

API集群负载统计 - 华为OD统一考试

OD统一考试 分值: 100分 题解: Java / Python / C++ 题目描述 某个产品的RESTful API集合部署在服务器集群的多个节点上,近期对客户端访问日志进行了采集,需要统计各个API的访问频次,根据热点信息在服务器节点之间做负载均衡,现在需要实现热点信息统计查询功能。 RESTf…

自定义View之重写onMeasure

一、重写onMeasure()来修改已有的View的尺寸 步骤&#xff1a; 重写 onMeasure()&#xff0c;并调用 super.onMeasure() 触发原先的测量用 getMeasuredWidth() 和 getMeasuredHeight() 取到之前测得的尺寸&#xff0c;利用这两个尺寸来计算出最终尺寸使用 setMeasuredDimensio…

鱼类识别Python+深度学习人工智能+TensorFlow+卷积神经网络算法

一、介绍 鱼类识别系统。使用Python作为主要编程语言开发&#xff0c;通过收集常见的30种鱼类&#xff08;‘墨鱼’, ‘多宝鱼’, ‘带鱼’, ‘石斑鱼’, ‘秋刀鱼’, ‘章鱼’, ‘红鱼’, ‘罗非鱼’, ‘胖头鱼’, ‘草鱼’, ‘银鱼’, ‘青鱼’, ‘马头鱼’, ‘鱿鱼’, ‘鲇…

基于JAVA的中小学教师课程排课系统 开源项目

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 角色管理模块2.2 课程档案模块2.3 排课位置模块2.4 排课申请模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 角色表3.2.2 课程表3.2.3 排课位置表3.2.4 排课申请表 四、系统展示五、核心代码5.1 查询课程5.2 新增课…

CentOS-7安装Docker

0.安装Docker Docker 分为 CE 和 EE 两大版本。CE 即社区版&#xff08;免费&#xff0c;支持周期 7 个月&#xff09;&#xff0c;EE 即企业版&#xff0c;强调安全&#xff0c;付费使用&#xff0c;支持周期 24 个月。 Docker CE 分为 stable test 和 nightly 三个更新频道…

2.7 SUMMARY

本章提供了CUDA C编程模型的快速、简化的概述。CUDA扩展C语言以支持并行计算。在本章中&#xff0c;我们讨论了这些扩展的基本子集。为了您的方便&#xff0c;我们将本章中讨论的扩展总结如下&#xff1a; FUNCTION DECLARATIONS CUDA C扩展了C函数声明语法&#xff0c;以支持…