前言:流程控制语句
-
什么是流程控制语句
-
流程控制语句:可以控制程序的执行流程。
-
-
流程控制语句的分类
-
顺序结构
-
选择结构
-
循环结构
-
-
执行流程:
-
-
案例演示
-
输出几句话看效果即可
-
class Demo1_Sequence { //sequence 顺序 public static void main(String[] args) { System.out.println("Hello World!11111"); System.out.println("Hello World!3333"); System.out.println("Hello World!22222"); System.out.println("Hello World!44444"); } }
-
1. 选择结构
1.1 选择结构if语句
-
选择结构的分类
-
if语句
-
switch语句
-
-
if语句有几种格式
-
格式1
- if (比较表达式) { 语句体; }
-
/* * C:if语句的格式1 * if(比较表达式) { 语句体; } * D:执行流程: * 先计算比较表达式的值,看其返回值是true还是false。 * 如果是true,就执行语句体; * 如果是false,就不执行语句体; */ class Demo1_If { public static void main(String[] args) { int age = 17; if (age >= 18) { System.out.println("可以浏览本网站"); } System.out.println("完了"); } }
-
格式2
-
if (比较表达式) {
语句体1;
}else {
语句体2;
} -
/* * A:if语句的格式2 * if(比较表达式) { 语句体1; }else { 语句体2; } * B:执行流程: * 首先计算比较表达式的值,看其返回值是true还是false。 * 如果是true,就执行语句体1; * 如果是false,就执行语句体2; * C:案例演示 * a:获取两个数据中较大的值 * b:判断一个数据是奇数还是偶数,并输出是奇数还是偶数 * 注意事项:else后面是没有比较表达式的,只有if后面有。 */ class Demo3_If { public static void main(String[] args) { /*int x = 0; if (x == 1) { System.out.println("男厕所欢迎您"); }else { System.out.println("女厕所欢迎您"); }*/ //a:获取两个数据中较大的值 /*int x = 10; int y = 20; int z; if (x > y) { z = x; }else { z = y; } System.out.println(z);*/ //b:判断一个数据是奇数还是偶数,并输出是奇数还是偶数 int num = 11; if (num % 2 == 0) { System.out.println(num + "是一个偶数"); }else { System.out.println(num + "是一个奇数"); } } }
-
-
格式3
-
if (比较表达式1) {
语句体1;
}else if (比较表达式2) {
语句体2;
}else if (比较表达式3) {
语句体3;
}
...
else {
语句体n+1;
} -
/* * A:if语句的格式3: * if(比较表达式1) { 语句体1; }else if(比较表达式2) { 语句体2; }else if(比较表达式3) { 语句体3; } ... else { 语句体n+1; } * B:执行流程: * 首先计算比较表达式1看其返回值是true还是false, * 如果是true,就执行语句体1,if语句结束。 * 如果是false,接着计算比较表达式2看其返回值是true还是false, * 如果是true,就执行语句体2,if语句结束。 * 如果是false,接着计算比较表达式3看其返回值是true还是false, * 如果都是false,就执行语句体n+1。 * C:注意事项:最后一个else可以省略,但是建议不要省略,可以对范围外的错误值提示 */ class Demo5_If { public static void main(String[] args) { int x = 2; if (x == 1) { System.out.println("男厕所欢迎您"); }else if (x == 0) { System.out.println("女厕所欢迎您"); }else { System.out.println("无法识别您的性别"); } } }
-
-
-
-
-
/* * a:比较表达式无论简单还是复杂,结果必须是boolean类型 * b:if语句控制的语句体如果是一条语句,大括号可以省略; * 如果是多条语句,就不能省略。建议永远不要省略。 * c:一般来说:有左大括号就没有分号,有分号就没有左大括号 */ class Demo2_If { public static void main(String[] args) { int age = 17; if (age >= 18 && age <= 60) { System.out.println("可以浏览本网站"); //int x = 10; 是两句话,int x声明是一句,x = 10 赋值是一句 } System.out.println("完了"); } }
- if语句的格式2和三元的相互转换问题
- if语句和三元运算符完成同一个效果
-
/* * A:案例演示 * if语句和三元运算符完成同一个效果 * B:案例演示 * if语句和三元运算符的区别 * 三元运算符实现的,都可以采用if语句实现。反之不成立。 * 什么时候if语句实现不能用三元改进呢? * 当if语句控制的操作是一个输出语句的时候就不能。 * 为什么呢?因为三元运算符是一个运算符,运算符操作完毕就应该有一个结果,而不是一个输出。 */ class Demo4_If { public static void main(String[] args) { int x = 10; int y = 20; int z; if (x > y) { //z = x; System.out.println(x + "是最大值"); }else { //z = y; System.out.println(y + "是最大值"); } //System.out.println(z); int a = 20; int b = 30; int c = (a > b)? a : b; } }
-
- if语句和三元运算符完成同一个效果
-
-
-
三元运算符实现的,都可以采用if语句实现。反之不成立。
-
-
什么时候if语句实现不能用三元改进呢?
-
当if语句控制的操作是一个输出语句的时候就不能。
-
-
-
- 选择结构if语句的嵌套使用
-
/* * A:案例演示 * 需求:获取三个数据中的最大值 * if语句的嵌套使用。 */ class Demo6_IfIf { public static void main(String[] args) { int a = 40; int b = 50; int c = 30; if (a > b) { if (a > c) { System.out.println(a + "是最大值"); }else { System.out.println(c + "是最大值"); } }else { //b >= a if (b > c) { System.out.println(b + "是最大值"); }else { System.out.println(c + "是最大值"); } } } }
-
1.2 选择结构switch语句
-
switch语句的格式
-
switch (表达式) { //基本数据类型可以接收byte,short,char,int
case 值1: //引用数据类型可以接收枚举(JDK1.5),String字符串(JDK1.7)
语句体1;
break;
case 值2:
语句体2;
break;
…
default:
语句体n+1;
break; }
-
-
switch语句的格式解释
-
面试题
-
byte可以作为switch的表达式吗?
- 可以。所有计算可以自动补位到int类型的,都可以
-
long可以作为switch的表达式吗?
- 不可以
-
String可以作为switch的表达式吗?
- 1.7版本JDK后可以
-
-
执行流程
-
先计算表达式的值
-
然后和case后面的匹配,如果有就执行对应的语句,否则执行default控制的语句
-
class Demo1_Switch { public static void main(String[] args) { /* * A:switch语句的格式 * int x = 10; switch(表达式) { //基本数据类型可以接收byte,short,char,int case 值1: //引用数据类型可以接收枚举(JDK1.5)String字符串(JDK1.7) 语句体1; break; case 值2: 语句体2; break; … default: 语句体n+1; break; } * B:switch语句的格式解释 * C:面试题 * byte可以作为switch的表达式吗? * long可以作为switch的表达式吗? * String可以作为switch的表达式吗? * C:执行流程 * 先计算表达式的值 * 然后和case后面的匹配,如果有就执行对应的语句,否则执行default控制的语句 */ String name = "rose"; String gender = "女"; switch (gender) { case "男士": System.out.println(name + "是一位" + gender + "喜欢吃饭睡觉打dota"); break; case "女士": System.out.println(name + "是一位" + gender + "喜欢逛街购物美容"); break; default: System.out.println(name + "是一位" + gender + "打雌性激素维持美貌容颜"); break; } } }
-
- 选择结构switch语句的练习
-
整数(给定一个值,输出对应星期几)
-
class Test1_Switch { public static void main(String[] args) { //* A:整数(给定一个值,输出对应星期几) int week = 1; switch (week) { case 1: System.out.println("星期一"); break; 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: System.out.println("星期六"); break; case 7: System.out.println("星期日"); break; default: System.out.println("对不起没有对应的星期"); break; } } }
-
- 选择结构switch语句的注意事项
-
案例演示
-
case后面只能是常量,不能是变量,而且,多个case后面的值不能出现相同的
-
default可以省略吗?
-
可以省略,但是不建议,因为它的作用是对不正确的情况给出提示。
-
特殊情况:
-
case就可以把值固定。
-
A,B,C,D
-
-
-
break可以省略吗?
-
最后一个可以省略,其他最好不要省略
-
会出现一个现象:case穿透。
-
最终我们建议不要省略
-
-
default一定要在最后吗?
-
不是,可以在任意位置。但是建议在最后。
-
-
switch语句的结束条件
-
遇到break就结束了
-
执行到switch的右大括号就结束了
-
-
-
- 选择结构switch语句练习
-
看程序写结果:
-
class Test2_Switch { public static void main(String[] args) { // A:看程序写结果: /*int x = 2; int y = 3; switch(x){ default: y++; break; case 3: y++; case 4: y++; } System.out.println("y="+y); // 输出4 */ //B:看程序写结果: int x = 2; int y = 3; switch(x){ default: y++; case 3: y++; case 4: y++; } System.out.println("y="+y); // 输出6 } }
-
省略了break,会出现case穿透现象,导致逻辑出错
-
-
- 选择结构if语句和switch语句的区别
-
总结switch语句和if语句的各自使用场景
-
switch建议判断固定值的时候用
-
if建议判断区间或范围的时候用
-
-
案例演示
-
分别用switch语句和if语句实现下列需求:
-
键盘录入月份,输出对应的季节
-
import java.util.Scanner; class Test3_SwitchIf { public static void main(String[] args) { /* * 键盘录入月份,输出对应的季节 一年有四季 3,4,5春季 6,7,8夏季 9,10,11秋季 12,1,2冬季 */ Scanner sc = new Scanner(System.in); //创建键盘录入对象 System.out.println("请输入月份"); int month = sc.nextInt(); //将键盘录入的结果存储在month /*switch (month) { case 3: case 4: case 5: System.out.println(month + "月是春季"); break; case 6: case 7: case 8: System.out.println(month + "月是夏季"); break; case 9: case 10: case 11: System.out.println(month + "月是秋季"); break; case 12: case 1: case 2: System.out.println(month + "月是冬季"); break; default: System.out.println("对不起没有对应的季节"); break; }*/ //用if语句来完成月份对应季节 if (month > 12 || month < 1) { System.out.println("对不起没有对应的季节"); }else if (month >= 3 && month <= 5) { System.out.println(month + "月是春季"); }else if (month >= 6 && month <= 8) { System.out.println(month + "月是夏季"); }else if (month >= 9 && month <= 11) { System.out.println(month + "月是秋季"); }else { System.out.println(month + "月是冬季"); } } }
-
-
-
2. 循环结构
2.1 循环结构概述
-
循环结构的分类
-
for
-
while
-
do...while
-
-
B:循环结构for语句的格式:
-
for(初始化表达式;条件表达式;循环后的操作表达式) { 循环体; }
-
C执行流程:
-
a:执行初始化语句
-
b:执行判断条件语句,看其返回值是true还是false
-
如果是true,就继续执行
-
如果是false,就结束循环
-
-
c:执行循环体语句;
-
d:执行循环后的操作表达式
-
e:回到B继续。
-
-
D:案例演示
-
在控制台输出10次"helloworld"
-
###04.02_Java语言基础(循环结构for语句的练习之获取数据)
-
A:案例演示
-
需求:请在控制台输出数据1-10
-
需求:请在控制台输出数据10-1
-
-
B:注意事项
-
a:判断条件语句无论简单还是复杂结果是boolean类型。
-
b:循环体语句如果是一条语句,大括号可以省略;如果是多条语句,大括号不能省略。建议永远不要省略。
-
c:一般来说:有左大括号就没有分号,有分号就没有左大括号
-
###04.03_Java语言基础(循环结构for语句的练习之求和思想)
-
A:案例演示
-
需求:求出1-10之间数据之和
-
-
B:学生练习
-
需求:求出1-100之间偶数和
-
需求:求出1-100之间奇数和
-
###04.04_Java语言基础(循环结构for语句的练习之水仙花)
-
A:案例演示
-
需求:在控制台输出所有的”水仙花数”
-
所谓的水仙花数是指一个三位数,其各位数字的立方和等于该数本身。
-
举例:153就是一个水仙花数。
-
153 = 111 + 555 + 333 = 1 + 125 + 27 = 153
-
###04.05_Java语言基础(循环结构for语句的练习之统计思想)
-
A:案例演示
-
需求:统计”水仙花数”共有多少个
-