【Java从入门到大牛】程序流程控制
🔥 本文由 程序喵正在路上 原创,CSDN首发!
💖 系列专栏:Java从入门到大牛
🌠 首发时间:2023年7月7日
🦋 欢迎关注🖱点赞👍收藏🌟留言🐾
🌟 一以贯之的努力 不得懈怠的人生
目录
- 程序的执行顺序
- 分支结构
- if
- switch
- 循环结构
- for循环
- for循环案例
- while循环
- while循环案例
- do-while循环
- 死循环
- 循环嵌套
- 跳转关键字:break、continue
- 生成随机数
- Random的使用
- 案例:猜数字游戏
程序的执行顺序
程序中最经典的三种执行顺序
- 顺序结构:自上而下地执行代码
- 分支结构:根据条件来选择对应代码执行
- 循环结构:控制某段代码重复执行
分支结构
if
if分支
根据条件的真假来决定是否执行某段代码
if分支有三种形式
if分支 第一种形式:if…
if (条件) {语句体;
}
执行流程:首先判断条件表达式的结果,如果结果为 true 则执行语句体,否则不执行
注意事项:if 语句中,如果大括号控制的语句体只有一行代码,则大括号可以省略不写,一般不推荐省略
if分支 第二种形式:if…else…
if (条件) {语句体1;
} else {语句体2;
}
执行流程:首先判断条件表达式的结果,如果结果为 true 则执行语句体1,否则执行语句体2
if分支 第三种形式:if…else…if
if (条件1) {语句体1;
} else if (条件2) {语句体2;
} else if (条件3) {语句体4;
}
. . .
else {语句体n+1;
}
执行流程:
- 先判断条件1的值,如果为 true 则执行语句体1,分支结束;如果为 false 则判断条件2的值
- 如果条件2的值为 true 就执行语句体2,分支结束;如果为 false 则判断条件3的值
- …
- 如果没有任何条件为 true,就执行最后的 else 分支的语句体n+1
案例:考试奖励
需求:用户通过键盘录入考试成绩,根据成绩所在的区间,程序会打印处不同的奖励机制
分析
- 通过键盘录入考试成绩
- 由于奖励种类较多,属于多种判断,所以采用 if…else…if 格式实现
- 为各种判断设置对应的条件
- 为各种判断设置对应的奖励,也就是打印出不同的提示
代码示例
import java.util.Scanner;public class Test {public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.print("请输入考试成绩:");int grade = sc.nextInt();System.out.print("奖励是:");if (grade >= 95) {System.out.println("山地车一辆");} else if (grade >= 90) {System.out.println("去游乐场玩一次");} else if (grade >= 80) {System.out.println("变形金刚玩具一个");} else if (grade >= 60) {System.out.println("女子单打");} else {System.out.println("男女混合双打");}}
}
switch
switch分支
通过比较值来决定执行哪条分支
switch(表达式) {case 值1:执行代码...;break;case 值2:执行代码...;break;...case 值n-1:执行代码...;break;default:执行代码n;
}
执行流程
- 先执行表达式的值,再拿着这个值去与 case 后的值进行匹配
- 与哪个 case 后的值一致就执行哪个 case 块的代码,遇到 break 就跳出 switch 分支
if分支 与 switch分支 的比较
- if 在功能上远远强大于 switch
- 当条件是区间的时候,应该使用 if 分支结构
- 当条件是与一个一个的值比较的时候,switch 分支更合适:格式良好、性能较好、代码优雅
使用switch分支的注意事项
- 表达式类型只能是 byte、short、int、char,JDK5 开始支持枚举,JDK7 开始支持 String,不支持 double、float、long
- case 给出的值不允许重复,且只能是字面量,不能是变量
- 正常使用 switch 的时候,不要忘记写 break,否则会出现穿透现象
多学一招:switch穿透性在某些情况下可以简化代码
当存在多个 case 分支的代码相同时,可以把相同的代码放到一个 case 块中,其他的 case 块都通过穿透性穿透到该 case 块执行代码即可,这样可以简化代码
循环结构
for循环
for循环特点
控制一段代码反复执行很多次
for循环格式
for (初始化语句; 循环条件; 迭代语句) {循环体语句(重复执行的代码);
}
for (int i = 0; i < 3; i++) {System.out.println("Hello World");
}
for循环案例
案例1:求和
需求:求 1-5 之间的数的和,并将求和的结果在控制台输出
分析
- 使用 for 循环依次产生 1、2、3、4、5
- 在循环外定义一个 int 类型的变量 sum 用于求和,循环每产生一个数,就加到 sum 中去
- 循环结束后,输出求和变量即是结果
代码示例
public class Test {public static void main(String[] args) {int sum = 0;for (int i = 1; i < 6; i++) {sum += i;}System.out.println("sum: " + sum);}
}
案例2:求奇数和
需求:求 1-10 之间的奇数的和,并将求和的结果在控制台输出
分析
- 使用 for 循环依次产生 1、2、3…9、10
- 在循环外定义一个 int 类型的变量 sum 用于求和
- 循环每产生一个数,先判断该数是否是奇数,如果是奇数就将其加到 sum 中去
- 循环结束后,输出求和变量即是结果
代码示例一:判断奇数
public class Test {public static void main(String[] args) {int sum = 0;for (int i = 1; i <= 10; i++) {if (i % 2 == 1) { //判断是否为奇数sum += i;}}System.out.println("sum: " + sum);}
}
代码示例二:直接生成奇数
public class Test {public static void main(String[] args) {int sum = 0;for (int i = 1; i <= 10; i += 2) { //每次循环产生的都是奇数sum += i;}System.out.println("sum: " + sum);}
}
案例3:求水仙花数
需求:在控制台输出所有的 “水仙花数”,水仙花数必须满足如下 2 个要求:
- 水仙花数是一个三位数
- 水仙花数的个位、十位、百位的数字立方和等于原数
分析
- 定义一个 for 循环从 100 一直到 999
- 每次访问到数据后,提取到该数据的个位、十位和百位数字
- 使用 if 语句判断:个位、十位、百位的数字立方和是否等于原数,等于则输出原数
代码示例
public class Test {public static void main(String[] args) {int a, b, c; //用来存放一个数的个位、十位、百位for (int i = 100; i <= 999; i++) {a = i % 10;b = i / 10 % 10;c = i / 100;//判断是否为水仙花数if (a * a * a + b * b * b + c * c * c == i) {//System.out.println("百位: " + c + ", 十位: " + b + ", 个位: " + a);System.out.println(i);}}}
}
while循环
while循环格式
初始化语句;
while (循环条件) {循环体语句(被重复执行的代码);迭代语句;
}
int i = 0;
while (i < 3) {System.out.println("Hello World");i++;
}
for循环 和 while循环的区别
- 功能上是完全一样的,for循环能解决的,用 while 循环也能解决,反之亦然
- 如果知道要循环几次,建议使用 for;不知道循环几次,建议使用 while
while循环案例
案例:纸张折叠成珠穆朗玛峰的高度
需求:世界最高山峰珠穆朗玛峰的高度是:8848.86米=8848860毫米,假如我有一张足够大的纸,它的厚度是 0.1 毫米。请问:该纸张折叠多少次后,可以达到珠穆朗玛峰的高度?
分析
- 定义变量存储珠穆朗玛峰的高度和纸张的高度
- 使用 while 循环来控制纸张折叠,循环条件是(纸张厚度<山峰高度),循环每执行一次,就表示纸张折叠一次,并把纸张厚度变为原来的两倍
- 循环外定义计数变量 count,循环每折叠一次纸张,让 count 变量 +1
代码示例
public class Test {public static void main(String[] args) {double peakHeight = 8848860; //山峰高度double paperThickness = 0.1; //纸张厚度int count = 0; //折叠次数while (paperThickness < peakHeight) {paperThickness *= 2;count++;}System.out.println("折叠 " + count + " 次后, 纸张厚度为 " + paperThickness + " 毫米");}
}
do-while循环
do-while循环特点
先执行后判断
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 ( ; ; ) {System.out.println("Hello World1");
}//经典写法
while (true) {System.out.println("Hello World2");
}do {System.out.println("Hello World3");
} while (true);
循环嵌套
什么是循环嵌套
循环中又包含循环
循环嵌套的特点
外部循环每循环一次,内部循环会全部执行完一轮
案例:打印矩阵
需求
在控制台使用 * 打印出 10 行 12 列的矩阵
代码示例
public class Test {public static void main(String[] args) {for (int i = 0; i < 10; i++) { //行for (int j = 0; j < 12; j++) { //列System.out.print("*");}System.out.println(); //每打印完一行后要换行}}
}
跳转关键字:break、continue
跳转关键字
- break:跳出并结束当前所在循环的执行
- continue:用于跳出当前循环的当次执行,直接进入循环的下一次执行
注意事项
- break 只能用于结束所在循环,或者结束所在 switch 分支的执行
- continue 只能在循环中进行使用
案例:密码验证
需求
系统密码是 520,请用户不断地输入密码进行验证,验证错误则输出:密码错误;验证成功则输出:欢迎进入系统,并停止程序
分析
- 定义一个整型变量用于记录正确的密码:520
- 使用 while 死循环,让用户不断输入数据,并与正确密码比对并给出比对结果。当验证成功后,则用 break 结束当前循环的执行
代码示例
import java.util.Scanner;public class Test {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int password = 520;int digit = 0;while (true) {System.out.print("请输入密码:");digit = sc.nextInt(); //接收用户输入if (digit == password) {System.out.println("欢迎进入系统");break;} else {System.out.println("密码错误");}}}
}
生成随机数
Random的使用
Random的作用
生成随机数
得到 0-9 的随机数的步骤
注意事项
nextInt(n)
功能只能生成 0 至 n-1 之间的随机数,不包含 n
Random生成指定区间的随机数
如果要生成 1-10 之间的随机数,该怎么实现呢?
技巧:通过在默认生成的区间上进行加减来得到指定区间
Random r = new Random();
int number = r.nextInt(10) + 1;
案例:猜数字游戏
需求
随机生成一个 1-100 之间的数,提示用户猜测,猜大提示过大,猜小提示过小,直到猜中结束游戏
分析
- 先随机生成一个 1-100 之间的数
- 定义一个死循环让用户可以一直猜测
- 在死循环里,每次都提示用户输入一个猜测的数字,并与生成的随机数进行比对,然后给出提示信息
代码示例
import java.util.Random;
import java.util.Scanner;public class Test {public static void main(String[] args) {Scanner sc = new Scanner(System.in);Random r = new Random();int randomDigit = r.nextInt(100) + 1; //随机生成一个 1-100 的数int guessDigit;while (true) {System.out.print("请输入你猜的数字:");guessDigit = sc.nextInt();if (guessDigit > randomDigit) {System.out.println("猜大了");} else if (guessDigit < randomDigit) {System.out.println("猜小了");} else {System.out.println("恭喜你, 猜中了!");break;}}}
}
运行结果
相关文章:

【Java从入门到大牛】程序流程控制
🔥 本文由 程序喵正在路上 原创,CSDN首发! 💖 系列专栏:Java从入门到大牛 🌠 首发时间:2023年7月7日 🦋 欢迎关注🖱点赞👍收藏🌟留言🐾…...

UML学习统一建模语言
unified modeling language 统一建模语言 面向对象软件分析与设计建模的事实标准 类命名:帕斯卡特命名 类之间的关系 关联关系:班级和学生,一个类的对象作为另一个类的成员变量; 通过非构造和setter注入的方式建立联系…...

【C++学习笔记】RAII思想——智能指针
智能指针 1 内存泄漏问题2 RAII(Resource Acquisition Is Initialization)2.1 使用RAII思想设计的SmartPtr类2.2 智能指针的原理2.3 小总结智能指针原理 3 智能指针的拷贝问题3.1 std::auto_ptr3.2 std::unique_ptr3.3 std::shared_ptr3.3.1 拷贝构造函数…...

ubantu配置python环境
安装python 参考博客 安装pycharm 博客 创建Pycharm快捷方式 博客 ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1, currently the ‘ssl’ module is compiled with File “/home/r00t/IdeaProjects/data/venv/lib/python3.9/site-packages/urllib3/init.py”…...

单向/双向V2G环境下分布式电源与电动汽车充电站联合配置方法(matlab代码)
目录 1 主要内容 目标函数 电动汽车负荷建模 算例系统图 程序亮点 2 部分代码 3 程序结果 4 下载链接 1 主要内容 该程序复现博士文章《互动环境下分布式电源与电动汽车充电站的优化配置方法研究》第五章《单向/双向V2G环境下分布式电源与电动汽车充电站联合配置方法》…...

dockerfile常用指令
Dockerfile常用指令 视频学习资料来源这里,点击本行文字即可跳转,讲的比较详细,不过比较老,跟最新的肯定是有一些差异的 Dockerfile官网文档的话点击这里 中文文档可以看看这个,不过没有详细的代码demo 或者是看这个 或…...

Matlab/simulink与dsp28335联合开发教程
一.入门篇(开发环境搭建) 1.1 Code Composer Studio 软件安装1.2 MATLAB 软件安装1.3 Control_SUIT3.4 软件安装1.4 C2000 Simulink 开发工具箱安装1.5 Visual_Studio_Professional 二. 基础篇(片内外设使用) 2.1 G…...

新项目搞完啦!!!
大家好,我是鱼皮。 经过了 7 场直播,总时长近 20 小时,我在 自己的编程导航 的第 5 个 全程直播开发 的项目 —— 智能 BI 项目,完结啦! 我在这里对该项目做一个简单的总结,希望让更多需要它的同学看到&am…...

分享一个可交互的小场景(二)
先看效果: 可互动的小场景 再看代码: JS部分 <script>var rotateDiv document.getElementById(rot);var rotateIcons document.getElementById(rot-icons);var clickRotateDiv document.getElementById(click-rot);var angle 0;clickRotateDi…...

2.5 DNS 应用 -- 1. DNS 概述
2.5 DNS 应用 -- 1. DNS 概述 DNS:Domain Name SystemDNS分布式层次式数据库DNS根域名服务器TLD和权威域名解析服务器本地域名解析服务器 DNS 查询迭代查询递归查询 DNS记录缓存和更新 DNS:Domain Name System Internet上主机/路由器的识别问题 IP地址域…...

基于STM32麦克风阵列音频信号处理系统设计
v hezkz17进数字音频系统研究开发交流答疑 附录: ADAU1452音频处理系统...

《重构》:Extract Class and Inline Class
hey,gays lets go on to refator those sh!t . i fork a rep, this the link GitHub - TIMPICKLE/refator-code: 重构 - 改善既有代码的设计 all right, lets see the genel description. 提取类 对立:内联类 目的:将大类分成小类 场景&a…...

腾讯云对象存储联合DataBend云数仓打通数据湖和数据仓库
随着数字化进程不断深入,数据呈大规模、多样性的爆发式增长。为满足更多样、更复杂的业务数据处理分析的诉求,湖仓一体应运而生。在Gartner发布的《Hype Cycle for Data Management 2021》中,湖仓一体(Lake house)首次…...

ExceptionLess windows部署。
前言 windows部署 1、一个api项目,里面包含了所有api。 2、一个elasticsearch项目,用来存储相关数据。 3、一个UI项目,也就是查看异常、设置新异常邮件通知等操作的后台。 异常在客户端提交的代码原理:一个异常被提交,…...

使用python实现1DCNN-GRU回归预测
要实现1DCNN-GRU进行回归预测,您可以使用以下Python代码作为参考: 首先,导入所需的库: import numpy as np import tensorflow as tf from tensorflow.keras.layers import Conv1D, MaxPooling1D, GlobalAveragePooling1D, GRU,…...

移动端数据可视化设计
在做APP设计的时候,难免会遇到一些需要展示数据的场景。使用传统的表格和文档展示数据不仅难看,也影响用户理解数据的含义。而数据可视化设计能将数据以更加直观的方式展现出来,使数据更加客观、更有说服力。 在移动应用中,数据可…...

Linux文件系统概述
本文已收录至《Linux知识与编程》专栏! 作者:ARMCSKGT 演示环境:CentOS 7 文件系统概述 前言正文文件与磁盘磁盘介绍与机械硬盘机械硬盘基础结构机械硬盘数据存储与管理 文件操作的细节创建文件访问文件删除文件恢复文件其他情况 最后 前言 …...

go专业数据结构与算法
go语言之专业数据结构与算法 2.数组概念 3.golang实现数组结构 4.golang实现数组迭代器 5.数组栈的高级实现 6.栈模拟低级递归 7.斐波那契数列栈模拟递归 8.递归实现文件夹遍历 9.栈模拟文件递归 10.层级展示文件夹 11.数组队列的实现 12.队列实现遍历文件夹 13.循环队列 14.链…...

Hive on Spark的小文件设置参数
Hive on Spark的小文件设置参数 参数调优 了解完了Spark作业运行的基本原理之后,对资源相关的参数就容易理解了。所谓的Spark资源参数调优,其实主要就是对Spark运行过程中各个使用资源的地方,通过调节各种参数,来优化资源使用的效…...

高级SQL语句
目录 MySQL 高级(进阶) SQL 语句函数数学函数:聚合函数字符串函数: 连接查询inner join(内连接):left join(左连接):right join(右连接): CREATE VIEW(视图)UNION(联集)C…...

IDE /skipping incompatible xxx_d.dll when searching for -lxxx_d
文章目录 概述场景复现用以测试的代码编译器位数不匹配导致?保持编译器类型一致再验证编译器位数的影响MingW下调用OS的库咋不告警?以mingW下使用winSocket为例MingW下网络编程的头文件分析该环境下链接的ws2_32库文件在哪里?mingW为啥可以兼容window下的动态库 概…...

C语言学习准备-编辑器选择
今天继续给大家更新C语言经典案例 今天的案例会比昨天稍微有一些难度,但是同时还是非常经典的案例 本来是想给大家继续更新C语言经典案例,但是有朋友反应C语言编辑器的选择,刚好我自己也是想更换一下C语言的编辑器,跟大家分享一下…...

微信为什么使用 SQLite 保存聊天记录?
概要 SQLite 是一个被大家低估的数据库,但有些人认为它是一个不适合生产环境使用的玩具数据库。事实上,SQLite 是一个非常可靠的数据库,它可以处理 TB 级的数据,但它没有网络层。接下来,本文将与大家共同探讨 SQLite 在…...

VB串口通讯方式解释
目前,Visual Basic (简称VB) 已成为WINDOWS 系统开发的主要语言,以其高效、简单易学及功能强大的特点越来越为广大程序设计人员及用户所青睐。VB 支持面向对象的程序设计,具有结构化的事件驱动编程模式并可以使用无限扩增的控件。在VB 应用程序中可以方便地调用WINDOWS API函数…...

Mybatis-Plus不能更新对象字段为空值问题解决
问题描述: 在使用Mybatis-Plus调用updateById方法进行数据更新默认情况下是不能更新空值字段的,而在实际开发过程中,往往会遇到需要将字段值更新为空值的情况,该如何解决呢? 原因分析: Mybatis-Plus中字…...

d3dx9_43.dll丢失怎么解决
d3dx9_43.dll丢失的影响 当我们在运行某些需要DirectX 9支持的程序时,如果系统中缺少d3dx9_43.dll文件,就会出现错误提示,导致程序无法正常启动。这个错误提示通常会类似于“找不到d3dx9_43.dll”或“d3dx9_43.dll不存在”。 打开电脑浏览器…...

【花雕】全国青少年机器人技术一级考试备考实操搭建手册8
随着科技的不断进步,机器人技术已经成为了一个重要的领域。在这个领域中,机械结构是机器人设计中至关重要的一部分,它决定了机器人的形态、运动方式和工作效率。对于青少年机器人爱好者来说,了解机械结构的基础知识,掌…...

【UE5 Cesium】09-Cesium for Unreal 子关卡应用实例(下)
效果 通过按钮点击事件实现子关卡的切换 步骤 新建两个Actor蓝图作为GeoMarker,分别命名为“BP_GeoMarker_BeiJing”、“BP_GeoMarker_ShangHai” 分别打开这两个蓝图,添加文本渲染组件 在指定的地理位置上拖入蓝图“BP_GeoMarker_BeiJing” 控制“BP_…...

插值应用案例2
案例1 高点和高程 在一丘陵地带测量高程,x和y方向每隔100m测一个点,得到高程如下表所列,试插值一曲面,确定合适的模型,并由此测到最高点和相应的高程。 x0/z0\y0 100 200 300 400 500 100 636 697 624 478 …...

【新星计划Linux】——常用命令(1)
作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页 目录 前言 一.常用命令 1.Linux的基本原则: 用户接口: 2.命令形…...