【JAVASE】顺序和选择结构
⭐ 作者:小胡_不糊涂
🌱 作者主页:小胡_不糊涂的个人主页
📀 收录专栏:浅谈Java
💖 持续更文,关注博主少走弯路,谢谢大家支持 💖
顺序和选择
- 1. 顺序结构
- 2. 分支结构
- 2.1 if 语句
- 2.2 switch 语句
1. 顺序结构
顺序结构比较简单,就是按照代码书写的顺序一行一行执行。
例如:
System.out.println("aaa");
System.out.println("bbb");
System.out.println("ccc");
这段代码的运行结果就是从上至下输出:
aaa
bbb
ccc
如果调整代码的书写顺序, 则执行顺序也发生变化:
System.out.println("aaa");
System.out.println("ccc");
System.out.println("bbb")
🍤 输出:
aaa
ccc
bbb
2. 分支结构
2.1 if 语句
语法格式1:
if(布尔表达式){// 语句
}
如果布尔表达式结果为 true,执行 if 中的语句,否则不执行。
比如:小明,如果这次考试考到90分或以上,给你奖励一个鸡腿。
public static void main(String[] args) {int score = 92;if(score >= 90){System.out.println("吃个大鸡腿!!!");}}
🍤 运行结果:

语法格式2:
if(布尔表达式){// 语句1
}else{// 语句2
}
如果布尔表达式结果为 true,则执行 if 中语句,否则执行 else 中语句。
比如:小明,如果这次考到90分以上,给你奖励一个大鸡腿,否则奖你一个大嘴巴子。
public static void main(String[] args) {int score = 89;if(score >= 90){System.out.println("吃个大鸡腿!!!");}else{System.out.println("挨大嘴巴子!!!");}
}
🍤 运行结果:

语法格式3:
if(布尔表达式1){// 语句1
}else if(布尔表达式2){// 语句2
}else{// 语句3
}
表达式1成立,执行语句1,否则表达式2成立,执行语句2,否则执行语句3。
比如:我们定义一个分数区间来划分学生的成绩
分数在 [90, 100] 之间的,为优秀
分数在 [80, 90) 之前的,为良好
分数在 [70, 80) 之间的,为中等
分数在 [60, 70) 之间的,为及格
分数在 [ 0, 60) 之间的,为不及格
错误数据
代码实现:
public static void main(String[] args) {int score=88;//学生成绩//判断if(score >= 90){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 >= 0 && score < 60){System.out.println("不及格");}else{System.out.println("错误数据");}
}
🍤 运行结果:

实例1:判断一个数字是奇数还是偶数
首先需要知道判断奇偶的规则。数学上,我们判断奇偶数是以该数是否可以整除 2 为根据的,一个数能够整除 2,即计算的余数为 0,当除以 2 后的余数为 0 时,就说明了该数为偶数,否则是奇数。
我们已经了解判断奇偶数的方法,尝试写出代码:
public static void main(String[] args) {int num = 10;if (num % 2 == 0) {System.out.println("num 是偶数");} else {System.out.println("num 是奇数");}
}
🍤 运行结果:

实例2:判断一个数字是正数,负数,还是零
大于 0 是正数,小于 0 是负数,所以这里只需要判断是大于、小于还是等于。
public static void main(String[] args) {int num = 10;if (num > 0) {System.out.println("正数");} else if (num < 0) {System.out.println("负数");} else {System.out.println("0");}
}
🍤 运行结果:

实例3:判断一个年份是否为闰年
普通闰年:公历年份是4的倍数,且不是100的倍数的,为闰年(如2004年、2020年等就是闰年)。
世纪闰年:公历年份是整百数的,必须是400的倍数才是闰年(如1900年不是闰年,2000年是闰年)。
public static void main(String[] args) {int year = 2000;if (year % 100 == 0) {// 判定世纪闰年if (year % 400 == 0) {System.out.println("是闰年");} else {System.out.println("不是闰年");}} else {// 普通闰年if (year % 4 == 0) {System.out.println("是闰年");} else {System.out.println("不是闰年");}}
}
🍤 运行结果:

注:
- 分号问题
这段代码的结果会是什么?
public static void main(String[] args) {int x = 20;if (x == 10);{System.out.println("hehe");}
}
🍤 运行结果:

有人可能会好奇,为什么这里 x 明明是20,不等于10啊,怎么还会打印 hehe 。
仔细观察就会发现:if 语句后跟有一个分号,这里导致分号成为了 if 语句的语句体,而 { } 中的代码已经成为了和一个 if 无关的代码块,所以会打印出来。

🍩分号代表语句的结束
- 悬垂 else 问题
public static void main(String[] args) {int x = 10;int y = 10;if (x == 20)if (y == 10)System.out.println("aaa");elseSystem.out.println("bbb");
}
🍤 运行结果:

为什么什么都没有打印?
首先if / else 语句中可以不加大括号,当不加{}时,他只控制下面的一条语句,要控制多行,必须加上大括号。
其次就是 else 是和最接近的 if 匹配,并不是和谁对齐就与它匹配。
2.2 switch 语句
基本语法:
switch(表达式){case 常量值1:{语句1;[break;]}case 常量值2:{语句2;[break;]}...default:{...;//内容都不满足时执行语句[break;]}
}
执行流程:
- 先计算表达式的值
- 和case依次比较,一旦有响应的匹配就执行该项下的语句,直到遇到break时结束
- 当表达式的值没有与所列项匹配时,执行default
实例:根据 day 的值输出星期
public static void main(String[] args) {int day = 6;switch(day) {case 1:System.out.println("星期一");break;//遇到break停止,跳出switch语句case 2:System.out.println("星期二");break;case 3:System.out.println("星期三");break;case 4:System.out.println("星期四");break;case 5:System.out.println("星期五");break;case 6:case 7:System.out.println("周末");break;default:System.out.println("输入有误");break;}
}
🍤 运行结果:

注:
- 多个case后的常量值不可以重复
- switch的括号内只能是以下类型的表达式:
基本类型:byte、char、short、int,不能是long、float、double、boolean类型;
引用类型:String常量串、枚举类型 - break 不要遗漏,否则会失去 “多分支选择” 的效果
- switch 不能表达复杂的条件
- switch 虽然支持嵌套,但是很丑,一般不推荐,毕竟这是一个看脸的世界~
使用错误类型
public static void main(String[] args) {double num=1.0;switch(num) {case 1.0:System.out.println("hehe");break;case 2.0:System.out.println("haha");break;}
}
🍤 编译出错:

遗漏break
public static void main(String[] args) {int day = 1;switch(day) {case 1:System.out.println("星期一");// break;case 2:System.out.println("星期二");break;}
}
🍤 运行结果:

不能表达复杂条件
// 例如: 如果 num 的值在 10 到 20 之间, 就打印 hehe
// 这样的代码使用 if 很容易表达, 但是使用 switch 无法表示
if (num > 10 && num < 20) {System.out.println("hehe");
}

相关文章:
【JAVASE】顺序和选择结构
⭐ 作者:小胡_不糊涂 🌱 作者主页:小胡_不糊涂的个人主页 📀 收录专栏:浅谈Java 💖 持续更文,关注博主少走弯路,谢谢大家支持 💖 顺序和选择 1. 顺序结构2. 分支结构2.1 …...
Oracle恢复删除的数据
不下心删除了生产库的数据或者不小心删除了一部分数据,如何恢复找回。 Oracle恢复删除数据的方法 方案一 利用oracle提供的闪回方法进行数据恢复,适用于delete删除方式 首先获取删除数据的时间点: select * from v$sql where sql_text l…...
(无人机方向)ros小白之键盘控制无人机(终端方式)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一:配置pycharm的ros开发环境二:核心代码讲解三 效果演示XTDrone 四 完整代码 前言 ubuntu 18.04 pycharm ros melodic 做一个在终端中…...
【python学习笔记】argparse --- 命令行选项、参数和子命令解析器
argparse 是 Python 的标准库中的一个模块,用于解析命令行参数。它提供了一种简单而灵活的方式来处理命令行输入,并生成易于使用的帮助文档。 使用 argparse 模块可以轻松地定义命令行参数和选项,并自动生成用法帮助和错误消息。示例&#x…...
【Java框架】RPC远程调用
RPC架构 一、RPC概述 RPC(Remote Procedure Call)叫作远程过程调用,它是利用网络从远程计算机上请求服务,可以理解为把程序的一部分放在其他远程计算机上执行。通过网络通信将调用请求发送至远程计算机后,利用远程计…...
云原生全栈体系(一)
云平台核心 第一章 为什么用云平台 环境统一按需付费即开即用稳定性强 一、国内常见云平台 阿里云、百度云、腾讯云、华为云、青云… 二、国外常见云平台 亚马逊 AWS、微软 Azure … 三、公有云 购买云服务商提供的公共服务器 公有云是最常见的云计算部署类型。公有云资…...
【【51单片机直流电机调速】】
学会电机调速,掌握中国速度 PWM的生成方法 先用户设定一个比较值,然后计数器定时自增。 当计数器<比较值,输出0 当计数器>比较值,输出1 main.c #include <REGX52.H> #include"delay.h" #include"…...
【Spring Boot】
目录 🍪1 Spring Boot 的创建 🎂2 简单 Spring Boot 程序 🍰3 Spring Boot 配置文件 🍮3.1 properties 基本语法 🫖3.2 yml 配置文件说明 🍭3.2.1 yml 基本语法 🍩3.3 配置文件里的配置类…...
使用docker 部署自己的chatgpt
直接docker部署 docker run --name chatgpt-web -d -p 3002:3002 --env OPENAI_API_KEYyour_api_key chenzhaoyu94/chatgpt-web:latestDocker compose部署 version: 3services:app:image: chenzhaoyu94/chatgpt-web # 总是使用 latest ,更新时重新 pull 该 tag 镜像即可ports…...
Python适配器模式介绍、使用方法
一、Python适配器模式介绍 适配器模式(Adapter Pattern) 是一种结构型设计模式,用于将不兼容的接口转换为另一种接口,以便系统间的协同工作。 功能: 适配器模式主要功能是将一个类的接口转换成客户端所期望的另一种接口,以满足…...
【数据结构】复杂度
🔥博客主页:小王又困了 📚系列专栏:数据结构 🌟人之为学,不日近则日退 ❤️感谢大家点赞👍收藏⭐评论✍️ 目录 一、什么是数据结构 二、什么是算法 三、算法的效率 四、时间复杂度 4.…...
【读点论文】PP-YOLOE: An evolved version of YOLO,面向友好部署的模型设计,为项目后续产业落地提供了更加有效的参考
PP-YOLOE: An evolved version of YOLO Abstract 在本报告中,我们介绍了PP-YOLOE,一种具有高性能和友好部署的工业最先进的目标探测器。我们在之前的PP-YOLOv2的基础上进行优化,采用无锚模式,更强大的骨干和颈部配备CSPRepResSt…...
微服务入门---SpringCloud(二)
微服务入门---SpringCloud(二) 1.Nacos配置管理1.1.统一配置管理1.1.1.在nacos中添加配置文件1.1.2.从微服务拉取配置 1.2.配置热更新1.2.1.方式一1.2.2.方式二 1.3.配置共享1)添加一个环境共享配置2)在user-service中读取共享配置…...
51单片机IO口控制
51单片机IO口控制 1.点亮LED灯 原理:根据电路图,指向IO口的引脚;拉低电平,灯亮、 如图: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Zfco4IjK-1690308697530)(C:/Users/xie19/Pictur…...
ERROR 1064 - You have an error in your SQL syntax;
ERROR 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near (/, 少个逗号吧,以前开始写SQL,特别是修改SQL的时候容易出现这样错误。 而且自己也知道在附近…...
leetcode做题笔记46
给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 思路一:回溯 void swap(int *nums,int index1,int index2) {int temp nums[index1];nums[index1] nums[index2];nums[index2] temp; }void prem(int* nu…...
快问快答JS面向对象面试题
1、说说你对闭包的理解 使用闭包主要是为了设计私有的方法和变量。闭包的优点是可以避免全局变量的污染,缺点是闭包会常驻内存,会增大内存使用量,使用不当很容易造成内存泄露。在js中,函数即闭包,只有函数才会产生作用…...
googlenet论文理解
参考文章:https://www.cnblogs.com/czy4869/p/8977788.html 以及下面这篇的前几行让我弄懂了论文里说的稀疏性和计算性能兼顾:参考文章:https://blog.csdn.net/weixin_52121118/article/details/119740279...
OnnxRuntime TensorRT OpenCV::DNN性能对比(YoloV8)实测
1. 前言 之前把ORT的一套推理环境框架搭好了,在项目中也运行得非常愉快,实现了cpu/gpu,fp32/fp16的推理运算,同onnx通用模型在不同推理框架下的性能差异对比贴一下,记录一下自己对各种推理框架的学习状况 YoloV8模型大小 模型名称参数量NANO3.2M...... 2. CPU篇 CPU推理框架性…...
【QT 网络云盘客户端】——获取用户文件列表信息
目录 1.获取用户文件列表信息分析 2.设置图标属性 3.向服务器获取文件的数量 4.向服务器获取文件信息列表 4.显示图标 1.获取用户文件列表信息分析 1.将QListWidget设置为图标模式 2. 当我们点击"按下载量升序","按下载量降序",“更新” 菜单选项 都会…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...
【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...
C++.OpenGL (20/64)混合(Blending)
混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...
省略号和可变参数模板
本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...
论文阅读笔记——Muffin: Testing Deep Learning Libraries via Neural Architecture Fuzzing
Muffin 论文 现有方法 CRADLE 和 LEMON,依赖模型推理阶段输出进行差分测试,但在训练阶段是不可行的,因为训练阶段直到最后才有固定输出,中间过程是不断变化的。API 库覆盖低,因为各个 API 都是在各种具体场景下使用。…...
WebRTC调研
WebRTC是什么,为什么,如何使用 WebRTC有什么优势 WebRTC Architecture Amazon KVS WebRTC 其它厂商WebRTC 海康门禁WebRTC 海康门禁其他界面整理 威视通WebRTC 局域网 Google浏览器 Microsoft Edge 公网 RTSP RTMP NVR ONVIF SIP SRT WebRTC协…...
路由基础-路由表
本篇将会向读者介绍路由的基本概念。 前言 在一个典型的数据通信网络中,往往存在多个不同的IP网段,数据在不同的IP网段之间交互是需要借助三层设备的,这些设备具备路由能力,能够实现数据的跨网段转发。 路由是数据通信网络中最基…...
LangChain【6】之输出解析器:结构化LLM响应的关键工具
文章目录 一 LangChain输出解析器概述1.1 什么是输出解析器?1.2 主要功能与工作原理1.3 常用解析器类型 二 主要输出解析器类型2.1 Pydantic/Json输出解析器2.2 结构化输出解析器2.3 列表解析器2.4 日期解析器2.5 Json输出解析器2.6 xml输出解析器 三 高级使用技巧3…...
