【Java从入门到大牛】程序流程控制 浅浅的花香味﹌ 2024-04-26 02:36 6阅读 0赞 > 🔥 本文由 [程序喵正在路上][Link 1] 原创,CSDN首发! > 💖 系列专栏:[Java从入门到大牛][Java] > 🌠 首发时间:2023年7月7日 > 🦋 欢迎关注🖱点赞👍收藏🌟留言🐾 > 🌟 一以贯之的努力 不得懈怠的人生 #### 目录 #### * 程序的执行顺序 * 分支结构 * * if * switch * 循环结构 * * for循环 * for循环案例 * while循环 * while循环案例 * do-while循环 * 死循环 * 循环嵌套 * 跳转关键字:break、continue * 生成随机数 * * Random的使用 * 案例:猜数字游戏 ## 程序的执行顺序 ## 程序中最经典的三种执行顺序 1. 顺序结构:自上而下地执行代码 2. 分支结构:根据条件来选择对应代码执行 3. 循环结构:控制某段代码重复执行 ## 分支结构 ## ### if ### **if分支** 根据条件的真假来决定是否执行某段代码 **if分支有三种形式** ![在这里插入图片描述][1d3dcec1f5e24d499dbc90fe43e5d820.png] **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. 先判断条件1的值,如果为 true 则执行语句体1,分支结束;如果为 false 则判断条件2的值 2. 如果条件2的值为 true 就执行语句体2,分支结束;如果为 false 则判断条件3的值 3. … 4. 如果没有任何条件为 true,就执行最后的 else 分支的语句体n+1 **案例:考试奖励** **需求**:用户通过键盘录入考试成绩,根据成绩所在的区间,程序会打印处不同的奖励机制 **分析** 1. 通过键盘录入考试成绩 2. 由于奖励种类较多,属于多种判断,所以采用 if…else…if 格式实现 3. 为各种判断设置对应的条件 4. 为各种判断设置对应的奖励,也就是打印出不同的提示 **代码示例** 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; } **执行流程** 1. 先执行表达式的值,再拿着这个值去与 case 后的值进行匹配 2. 与哪个 case 后的值一致就执行哪个 case 块的代码,遇到 break 就跳出 switch 分支 **if分支 与 switch分支 的比较** * if 在功能上远远强大于 switch * 当条件是区间的时候,应该使用 if 分支结构 * 当条件是与一个一个的值比较的时候,switch 分支更合适:格式良好、性能较好、代码优雅 **使用switch分支的注意事项** 1. 表达式类型只能是 byte、short、int、char,JDK5 开始支持枚举,JDK7 开始支持 String,不支持 double、float、long 2. case 给出的值不允许重复,且只能是字面量,不能是变量 3. 正常使用 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 之间的数的和,并将求和的结果在控制台输出 **分析** 1. 使用 for 循环依次产生 1、2、3、4、5 2. 在循环外定义一个 int 类型的变量 sum 用于求和,循环每产生一个数,就加到 sum 中去 3. 循环结束后,输出求和变量即是结果 **代码示例** 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 之间的奇数的和,并将求和的结果在控制台输出 **分析** 1. 使用 for 循环依次产生 1、2、3…9、10 2. 在循环外定义一个 int 类型的变量 sum 用于求和 3. 循环每产生一个数,先判断该数是否是奇数,如果是奇数就将其加到 sum 中去 4. 循环结束后,输出求和变量即是结果 **代码示例一:判断奇数** 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 个要求: 1. 水仙花数是一个三位数 2. 水仙花数的个位、十位、百位的数字立方和等于原数 **分析** 1. 定义一个 for 循环从 100 一直到 999 2. 每次访问到数据后,提取到该数据的个位、十位和百位数字 3. 使用 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 毫米。请问:该纸张折叠多少次后,可以达到珠穆朗玛峰的高度? **分析** 1. 定义变量存储珠穆朗玛峰的高度和纸张的高度 2. 使用 while 循环来控制纸张折叠,循环条件是(纸张厚度<山峰高度),循环每执行一次,就表示纸张折叠一次,并把纸张厚度变为原来的两倍 3. 循环外定义计数变量 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,请用户不断地输入密码进行验证,验证错误则输出:密码错误;验证成功则输出:欢迎进入系统,并停止程序 **分析** 1. 定义一个整型变量用于记录正确的密码:520 2. 使用 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 的随机数的步骤** ![在这里插入图片描述][6b6b10565c1e4dd498b972b4b2649b80.png] **注意事项** `nextInt(n)` 功能只能生成 0 至 n-1 之间的随机数,不包含 n **Random生成指定区间的随机数** 如果要生成 1-10 之间的随机数,该怎么实现呢? 技巧:通过在默认生成的区间上进行加减来得到指定区间 Random r = new Random(); int number = r.nextInt(10) + 1; ### 案例:猜数字游戏 ### **需求** 随机生成一个 1-100 之间的数,提示用户猜测,猜大提示过大,猜小提示过小,直到猜中结束游戏 **分析** 1. 先随机生成一个 1-100 之间的数 2. 定义一个死循环让用户可以一直猜测 3. 在死循环里,每次都提示用户输入一个猜测的数字,并与生成的随机数进行比对,然后给出提示信息 **代码示例** 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; } } } } **运行结果** ![在这里插入图片描述][80020b18b24d4be18d715d55670d7148.png] [Link 1]: https://blog.csdn.net/weixin_62511863?spm=1011.2421.3001.5343 [Java]: https://blog.csdn.net/weixin_62511863/category_12365679.html?spm=1001.2014.3001.5482 [1d3dcec1f5e24d499dbc90fe43e5d820.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/26/e962b19b86f044409fe15d9fdbfeb978.png [6b6b10565c1e4dd498b972b4b2649b80.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/26/6fd4d0bec0174f2c894ec577bcbc4364.png [80020b18b24d4be18d715d55670d7148.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/26/a16e4fc11cc0402b9d325f7ccba65437.png
相关 【Java从入门到大牛】Java高级技术 注解(Annotation)就是 Java 代码里的特殊标记,比如:@Override、@Test 等,作用是:让其他程序根据注解信息来决定怎么执行该程序自定义注解,就是... 忘是亡心i/ 2024年04月26日 02:57/ 0 赞/ 7 阅读
相关 【Java从入门到大牛】网络编程 可以让设备中的程序与网络上的其他设备中的程序进行数据交互,也就是实现网络通信Java的 java.net.* 包下提供了网络编程的解决方案。 Myth丶恋晨/ 2024年04月26日 02:56/ 0 赞/ 6 阅读
相关 【Java从入门到大牛】String和ArrayList 本文主要介绍了String类和ArrayList类的基本概念及其使用方法。 淩亂°似流年/ 2024年04月26日 02:42/ 0 赞/ 5 阅读
相关 【Java从入门到大牛】程序流程控制 本文介绍程序的流程控制方式,主要讲解了分支结构和循环结构,还介绍了如何生成随机数及其应用。 浅浅的花香味﹌/ 2024年04月26日 02:36/ 0 赞/ 7 阅读
还没有评论,来说两句吧...