Java基础语法:day03【flow control】
一、流程语句
概述
在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的。也就是说,程序的流程对运行结果有直接的影响。所以,我们必须清楚每条语句的执行流程。
而且,很多时候我们要通过控制语句的执行顺序来实现我们要完成的功能。
顺序结构
public class Demo01Sequence { public static void main(String[] args) { System.out.println("今天天气不错"); System.out.println("挺风和日丽的"); System.out.println("我们下午没课"); System.out.println("这的确挺爽的"); } }
运行结果:
"C:\Program Files\Java\jdk-13.0.2\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2019.2\lib\idea_rt.jar=53969:C:\Program Files\JetBrains\IntelliJ IDEA 2019.2\bin" -Dfile.encoding=UTF-8 -classpath C:\java\JavaApps\out\production\JavaApps day03.Demo01Sequence 今天天气不错 挺风和日丽的 我们下午没课 这的确挺爽的 Process finished with exit code 0
二、判断语句
1、判断语句1--if
1、语句格式
if(关系表达式){ 语句体; }
2、执行流程
- 首先判断关系表达式看其结果是 true还是false
- 如果是 true就执行语句体
- 如果是 false就不执行语句体
3、示例代码
// 单if语句 public class Demo02If { public static void main(String[] args) { System.out.println("今天天气不错,正在压马路……突然发现一个快乐的地方:网吧"); int age = 19; if (age >= 18) { System.out.println("进入网吧,开始high!"); System.out.println("遇到了一群猪队友,开始骂街。"); System.out.println("感觉不爽,结账走人。"); } System.out.println("回家吃饭"); } }
运行结果:
"C:\Program Files\Java\jdk-13.0.2\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2019.2\lib\idea_rt.jar=54040:C:\Program Files\JetBrains\IntelliJ IDEA 2019.2\bin" -Dfile.encoding=UTF-8 -classpath C:\java\JavaApps\out\production\JavaApps day03.Demo02If 今天天气不错,正在压马路……突然发现一个快乐的地方:网吧 进入网吧,开始high! 遇到了一群猪队友,开始骂街。 感觉不爽,结账走人。 回家吃饭 Process finished with exit code 0
2、 判断语句2--if...else
1、语句格式
if(关系表达式) { 语句体1; }else { 语句体2; }
2、执行流程
- 首先判断关系表达式看其结果是 true还是false
- 如果是 true就执行语句体1
- 如果是 false就执行语句体2
3、示例代码
package day03; public class Demo03IfElse { public static void main(String[] args) { int num = 666; if (num % 2 == 0) { // 如果除以2能够余数为0,说明是偶数 System.out.println("偶数"); } else { System.out.println("奇数"); } } }
运行结果:
"C:\Program Files\Java\jdk-13.0.2\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2019.2\lib\idea_rt.jar=54094:C:\Program Files\JetBrains\IntelliJ IDEA 2019.2\bin" -Dfile.encoding=UTF-8 -classpath C:\java\JavaApps\out\production\JavaApps day03.Demo03IfElse 偶数 Process finished with exit code 0
3、判断语句3--if..else if...else
1、语句格式
if (判断条件1) { 执行语句1; } else if (判断条件2) { 执行语句2; } ... }else if (判断条件n) { 执行语句n; } else { 执行语句n+1; }
2、执行流程
- 首先判断关系表达式 1看其结果是true还是false
- 如果是 true就执行语句体1
- 如果是 false就继续判断关系表达式2看其结果是true还是false
- 如果是 true就执行语句体2
- 如果是 false就继续判断关系表达式…看其结果是true还是false
- …
- 如果没有任何关系表达式为 true,就执行语句体n+1。
3、示例代码
// x和y的关系满足如下: // 如果x >= 3,那么y = 2x + 1; // 如果-1 < x < 3,那么y = 2x; // 如果x <= -1,那么y = 2x – 1; public class Demo04IfElseExt { public static void main(String[] args) { int x = -10; int y; if (x >= 3) { y = 2 * x + 1; } else if (-1 < x && x < 3) { y = 2 * x; } else { y = 2 * x - 1; } System.out.println("结果是:" + y); } }
运行结果:
"C:\Program Files\Java\jdk-13.0.2\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2019.2\lib\idea_rt.jar=54210:C:\Program Files\JetBrains\IntelliJ IDEA 2019.2\bin" -Dfile.encoding=UTF-8 -classpath C:\java\JavaApps\out\production\JavaApps day03.Demo04IfElseExt 结果是:-21 Process finished with exit code 0
4、语句练习
1、需求:
指定考试成绩,判断学生等级
90-100 优秀
80-89 好
70-79 良
60-69 及格
60 以下 不及格
2、实现代码
public class Demo05IfElsePractise { public static void main(String[] args) { int score = 120; 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 if (score >= 0 && score < 60) { System.out.println("不及格"); } else { // 单独处理边界之外的不合理情况 System.out.println("数据错误"); } } }
运行结果:
"C:\Program Files\Java\jdk-13.0.2\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2019.2\lib\idea_rt.jar=54256:C:\Program Files\JetBrains\IntelliJ IDEA 2019.2\bin" -Dfile.encoding=UTF-8 -classpath C:\java\JavaApps\out\production\JavaApps day03.Demo05IfElsePractise 数据错误 Process finished with exit code 0
int score = 99;
"C:\Program Files\Java\jdk-13.0.2\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2019.2\lib\idea_rt.jar=54284:C:\Program Files\JetBrains\IntelliJ IDEA 2019.2\bin" -Dfile.encoding=UTF-8 -classpath C:\java\JavaApps\out\production\JavaApps day03.Demo05IfElsePractise 优秀 Process finished with exit code 0
5、if 语句和三元运算符的互换
1、需求:
题目:使用三元运算符和标准的if-else语句分别实现:取两个数字当中的最大值
2、实现代码
public class Demo06Max { public static void main(String[] args) { int a = 105; int b = 20; // 首先使用三元运算符 // int max = a > b ? a : b; // 使用今天的if语句 int max; if (a > b) { max = a; } else { max = b; } System.out.println("最大值:" + max); } }
运行结果
"C:\Program Files\Java\jdk-13.0.2\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2019.2\lib\idea_rt.jar=54352:C:\Program Files\JetBrains\IntelliJ IDEA 2019.2\bin" -Dfile.encoding=UTF-8 -classpath C:\java\JavaApps\out\production\JavaApps day03.Demo06Max 最大值:105 Process finished with exit code 0
三、选择语句
1、选择语句--switch
1、语句格式
switch(表达式) { case 常量值1: 语句体1; break; case 常量值2: 语句体2; break; ... default: 语句体n+1; break; }
2、执行流程
- 首先计算出表达式的值
- 其次,和 case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束。
- 最后,如果所有的 case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。
3、示例代码
public class Demo08SwitchNotice { public static void main(String[] args) { int num = 2; switch (num) { case 1: System.out.println("你好"); break; case 2: System.out.println("我好"); // break; case 3: System.out.println("大家好"); break; default: System.out.println("他好,我也好。"); break; } // switch } }
运行结果:
"C:\Program Files\Java\jdk-13.0.2\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2019.2\lib\idea_rt.jar=54463:C:\Program Files\JetBrains\IntelliJ IDEA 2019.2\bin" -Dfile.encoding=UTF-8 -classpath C:\java\JavaApps\out\production\JavaApps day03.Demo08SwitchNotice 我好 大家好 Process finished with exit code 0
4、注意事项
1. 多个case后面的数值不可以重复。
2. switch后面小括号当中只能是下列数据类型:
- 基本数据类型:byte/short/char/int
- 引用数据类型:String字符串、enum枚举
3. switch语句格式可以很灵活:前后顺序可以颠倒,而且break语句还可以省略。“匹配哪一个case就从哪一个位置向下执行,直到遇到了break或者整体结束为止。”
2、 case 的穿透性
在switch语句中,如果case的后面不写break,将出现穿透现象,也就是不会在判断下一个case的值,直接向后运行,直到遇到break,或者整体switch结束
public static void main(String[] args) { int i = 5; switch (i){ case 0: System.out.println("执行case0"); break; case 5: System.out.println("执行case5"); case 10: System.out.println("执行case10"); default: System.out.println("执行default"); } }
上述程序中,执行case5后,由于没有break语句,程序会一直向后走,不会在判断case,也不会理会break,直接运行完整体switch。
由于case存在穿透性,因此初学者在编写switch语句时,必须要写上break。
第四章 循环语句
1、 循环语句1--for
循环结构的基本组成部分,一般可以分成四部分:
1. 初始化语句:在循环开始最初执行,而且只做唯一一次。
2. 条件判断:如果成立,则循环继续;如果不成立,则循环退出。
3. 循环体:重复要做的事情内容,若干行语句。
4. 步进语句:每次循环之后都要进行的扫尾工作,每次循环结束之后都要执行一次。
1、语句格式
for(初始化表达式①; 布尔表达式②; 步进表达式④){ 循环体③ }
2、执行流程
执行顺序:①②③④ >②③④>②③④…②不满足为止。
①负责完成循环变量初始化
②负责判断是否满足循环条件,不满足则跳出循环
③具体执行的语句
④循环后,循环条件所涉及变量的变化情况
3、示例代码
public class Demo09For { public static void main(String[] args) { for (int i = 1; i <= 5; i++) { System.out.println("我错啦!原谅我吧!" + i); } System.out.println("程序停止"); } }
运行结果:
"C:\Program Files\Java\jdk-13.0.2\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2019.2\lib\idea_rt.jar=54743:C:\Program Files\JetBrains\IntelliJ IDEA 2019.2\bin" -Dfile.encoding=UTF-8 -classpath C:\java\JavaApps\out\production\JavaApps day03.Demo09For 我错啦!原谅我吧!1 我错啦!原谅我吧!2 我错啦!原谅我吧!3 我错啦!原谅我吧!4 我错啦!原谅我吧!5 程序停止 Process finished with exit code 0
2、 循环语句2--while
1、语句格式
初始化表达式① while(布尔表达式②){ 循环体③ 步进表达式④ }
2、执行流程
执行顺序:①②③④ >②③④>②③④…②不满足为止。
①负责完成循环变量初始化。
②负责判断是否满足循环条件,不满足则跳出循环。
③具体执行的语句。
④循环后,循环变量的变化情况。
3、示例代码
public class Demo10While { public static void main(String[] args) { for (int i = 1; i <= 5; i++) { System.out.println("我错啦!" + i); } System.out.println("================="); int i = 1; // 1. 初始化语句 while (i <= 5) { // 2. 条件判断 System.out.println("我错啦!" + i); // 3. 循环体 i++; // 4. 步进语句 } } }
运行结果:
"C:\Program Files\Java\jdk-13.0.2\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2019.2\lib\idea_rt.jar=55015:C:\Program Files\JetBrains\IntelliJ IDEA 2019.2\bin" -Dfile.encoding=UTF-8 -classpath C:\java\JavaApps\out\production\JavaApps day03.Demo10While 我错啦!1 我错啦!2 我错啦!3 我错啦!4 我错啦!5 ================= 我错啦!1 我错啦!2 我错啦!3 我错啦!4 我错啦!5 Process finished with exit code 0
3、 循环语句3--do...while1、语句格式
1、语句格式
初始化表达式① do{ 循环体③ 步进表达式④ }while(布尔表达式②);
2、执行流程
执行顺序:①③④ >②③④>②③④…②不满足为止。 ①负责完成循环变量初始化。 ②负责判断是否满足循环条件,不满足则跳出循环。 ③具体执行的语句 ④循环后,循环变量的变化情况
3、示例代码
package day03; public class Demo11DoWhile { public static void main(String[] args) { for (int i = 1; i <= 5; i++) { System.out.println("原谅你啦!起来吧!地上怪凉!" + i); } System.out.println("==============="); int i = 1; // 1. 初始化语句 do { System.out.println("原谅你啦!起来吧!地上怪凉!" + i); // 3. 循环体 i++; // 4. 步进语句 } while (i <= 3); // 2. 条件判断 } }
运行结果:
"C:\Program Files\Java\jdk-13.0.2\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2019.2\lib\idea_rt.jar=55124:C:\Program Files\JetBrains\IntelliJ IDEA 2019.2\bin" -Dfile.encoding=UTF-8 -classpath C:\java\JavaApps\out\production\JavaApps day03.Demo11DoWhile 原谅你啦!起来吧!地上怪凉!1 原谅你啦!起来吧!地上怪凉!2 原谅你啦!起来吧!地上怪凉!3 原谅你啦!起来吧!地上怪凉!4 原谅你啦!起来吧!地上怪凉!5 =============== 原谅你啦!起来吧!地上怪凉!1 原谅你啦!起来吧!地上怪凉!2 原谅你啦!起来吧!地上怪凉!3 Process finished with exit code 0
语句练习
题目:求出1-100之间的偶数和。
思路:
1. 既然范围已经确定了是1到100之间,那么我就从1、2、3……一直到100这么多数字一个一个进行检查。
2. 总共有100个数字,并非所有数字都能用。必须要是偶数才能用,判断(if语句)偶数:num % 2 == 0
3. 需要一个变量,用来进行累加操作。也就好比是一个存钱罐。
实现代码
package day03; public class Demo12HundredSum { public static void main(String[] args) { int sum = 0; // 用来累加的存钱罐 for (int i = 1; i <= 100; i++) { if (i % 2 == 0) { // 如果是偶数 sum += i; } } System.out.println("结果是:" + sum); } }
运行结果
"C:\Program Files\Java\jdk-13.0.2\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2019.2\lib\idea_rt.jar=55210:C:\Program Files\JetBrains\IntelliJ IDEA 2019.2\bin" -Dfile.encoding=UTF-8 -classpath C:\java\JavaApps\out\production\JavaApps day03.Demo12HundredSum 结果是:2550 Process finished with exit code 0
4、 循环语句的区别
1. 如果条件判断从来没有满足过,那么for循环和while循环将会执行0次,但是do-while循环会执行至少一次。
2. for循环的变量在小括号当中定义,只有循环内部才可以使用。while循环和do-while循环初始化语句本来就在外面,所以出来循环之后还可以继续使用。
示例代码
package day03; public class Demo13LoopDifference { public static void main(String[] args) { for (int i = 1; i < 0; i++) { System.out.println("Hello"); } // System.out.println(i); // 这一行是错误写法!因为变量i定义在for循环小括号内,只有for循环自己才能用。 System.out.println("================"); int i = 1; do { System.out.println("World"); i++; } while (i < 0); // 现在已经超出了do-while循环的范围,我们仍然可以使用变量i System.out.println(i); // 2 } }
运行结果:
"C:\Program Files\Java\jdk-13.0.2\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2019.2\lib\idea_rt.jar=55277:C:\Program Files\JetBrains\IntelliJ IDEA 2019.2\bin" -Dfile.encoding=UTF-8 -classpath C:\java\JavaApps\out\production\JavaApps day03.Demo13LoopDifference ================ World 2 Process finished with exit code 0
5、跳出语句
break关键字的用法有常见的两种:
1. 可以用在switch语句当中,一旦执行,整个switch语句立刻结束。
2. 还可以用在循环语句当中,一旦执行,整个循环语句立刻结束。打断循环。
示例代码
package day03; public class Demo14Break { public static void main(String[] args) { for (int i = 1; i <= 10; i++) { // 如果希望从第4次开始,后续全都不要了,就要打断循环 if (i == 4) { // 如果当前是第4次 break; // 那么就打断整个循环 } System.out.println("Hello" + i); } } }
输出
"C:\Program Files\Java\jdk-13.0.2\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2019.2\lib\idea_rt.jar=55344:C:\Program Files\JetBrains\IntelliJ IDEA 2019.2\bin" -Dfile.encoding=UTF-8 -classpath C:\java\JavaApps\out\production\JavaApps day03.Demo14Break Hello1 Hello2 Hello3 Process finished with exit code 0
关于循环的选择,有一个小建议:凡是次数确定的场景多用for循环;否则多用while循环。
另一种循环控制语句是continue关键字。
一旦执行,立刻跳过当前次循环剩余内容,马上开始下一次循环。
示例代码
package day03; public class Demo15Continue { public static void main(String[] args) { for (int i = 1; i <= 10; i++) { if (i == 4) { // 如果当前是第4层 continue; // 那么跳过当前次循环,马上开始下一次(第5层) } System.out.println(i + "层到了。"); } } }
运行结果
"C:\Program Files\Java\jdk-13.0.2\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2019.2\lib\idea_rt.jar=55344:C:\Program Files\JetBrains\IntelliJ IDEA 2019.2\bin" -Dfile.encoding=UTF-8 -classpath C:\java\JavaApps\out\production\JavaApps day03.Demo14Break Hello1 Hello2 Hello3 Process finished with exit code 0
五、扩展知识
1、死循环
永远停不下来的循环,叫做死循环。
1、语句格式
死循环的标准格式: while (true) { 循环体 }
2、示例代码
package day03; public class Demo16DeadLoop { public static void main(String[] args) { while (true) { System.out.println("I Love Java!"); } // System.out.println("Hello"); } }
运行结果:
"C:\Program Files\Java\jdk-13.0.2\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2019.2\lib\idea_rt.jar=55737:C:\Program Files\JetBrains\IntelliJ IDEA 2019.2\bin" -Dfile.encoding=UTF-8 -classpath C:\java\JavaApps\out\production\JavaApps day03.Demo15Continue I Love Java! I Love Java! I Love Java! ... 无休止的下去
在后期的开发中,会出现使用死循环的场景,例如:我们需要读取用户输入的输入,但是用户输入多少数据我们并不清楚,也只能使用死循环,当用户不想输入数据了,
就可以结束循环了,如何去结束一个死循环呢,就需要使用到跳出语句了。
2、 嵌套循环
所谓嵌套循环 ,是指一个循环的循环体是另一个循环。比如for循环里面还有一个for循环,就是嵌套循环。总共的循环次数=外循环次数*内循环次数
1、语句格式
for(初始化表达式①; 循环条件②; 步进表达式⑦) { for(初始化表达式③; 循环条件④; 步进表达式⑥) { 执行语句⑤; } }
2、执行流程
执行顺序:①②③④⑤⑥ >④⑤⑥>⑦②③④⑤⑥>④⑤⑥
外循环一次,内循环多次。
比如跳绳:一共跳 5组,每组跳10个。5组就是外循环,10个就是内循环。
3、示例代码
public static void main(String[] args) { //5*8的矩形,打印5行*号,每行8个 //外循环5次,内循环8次 for(int i = 0; i < 5; i++){ for(int j = 0; j < 8; j++){ //不换行打印星号 System.out.print("*"); } //内循环打印8个星号后,需要一次换行 System.out.println(); }
运行结果:
"C:\Program Files\Java\jdk-13.0.2\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2019.2\lib\idea_rt.jar=56980:C:\Program Files\JetBrains\IntelliJ IDEA 2019.2\bin" -Dfile.encoding=UTF-8 -classpath C:\java\JavaApps\out\production\JavaApps day03.Demo16DeadLoop ******** ******** ******** ******** ******** Process finished with exit code 0