流程控制语句:可以控制程序的执行流程。
分类:
顺序结构
选择结构
循环结构
选择结构
选择结构:
if语句
switch语句
1.if语句
1.if语句的格式1:
if(比较表达式) {
语句体;
}
执行流程:先计算比较表达式的值,看其返回值是true还是false。
如果是true,就执行语句体;
如果是false,就不执行语句体;
if语句的注意事项:
A:比较表达式无论简单还是复杂,结果必须是boolean类型
B:if语句控制的语句体如果是一条语句,大括号可以省略;
如果是多条语句,就不能省略。建议永远不要省略。
C:一般来说:有左大括号就没有分号,有分号就没有左大括号
如: |
if(x == 10) { System.out.println("x等于10"); }
if(b != 100); //这里其实是有语句体的,只不过是空语句体。 |
2.if语句格式2:
if(比较表达式) {
语句体1;
}else{
语句体2;
}
执行流程:
首先计算比较表达式的值,看其返回值是true还是false。
如果是true,就执行语句体1;
如果是false,就执行语句体2;
注意:else后面是没有比较表达式的,只有if后面有。
如: |
if(a ==b) { System.out.println("a等于b"); }else { System.out.println("a不等于b"); } |
注释:if语句和三目运算符的区别?
三元运算符实现的,都可以采用if语句实现。反之不成立。
什么时候if语句实现不能用三元改进呢?
当if语句控制的操作是一个输出语句的时候就不能。
为什么呢?因为三元运算符是一个运算符,运算符操作完毕就应该有一个结果,而不是一个输出。
练习1 |
获取两个数据中较大的值 |
|
如: |
int max; if(a >b) { max = a; }else { max = b; } |
|
练习2 |
判断一个数据是奇数还是偶数,并输出是奇数还是偶数 |
|
如: |
if(x%2 == 0) { System.out.println(x+"这个数据是偶数"); }else { System.out.println(x+"这个数据是奇数"); } |
3.if语句的格式3:
if(比较表达式1) {
语句体1;
}elseif(比较表达式2) {
语句体2;
}elseif(比较表达式3) {
语句体3;
}
...
else{
语句体n+1;
}
执行流程:
首先计算比较表达式1看其返回值是true还是false,
如果是true,就执行语句体1,if语句结束。
如果是false,接着计算比较表达式2看其返回值是true还是false,
如果是true,就执行语句体2,if语句结束。
如果是false,接着计算比较表达式3看其返回值是true还是false,
...
如果都是false,就执行语句体n+1。
需求: |
键盘录入一个成绩,判断并输出成绩的等级。 |
如: |
//创建键盘录入对象 Scanner sc = new Scanner(System.in); //录入数据 System.out.println("请输入你的考试成绩:"); int score = sc.nextInt(); //判断成绩等级 if(score<0 ||score>100) { System.out.println("你输入的成绩有误"); }else 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 { System.out.println("不及格"); } |
三种if语句分别适合做什么事情呢?
格式1:适合做单个判断
格式2:适合做两个判断
格式3:适合做多个判断
需求: |
键盘录入x的值,计算出y的并输出。 x>=3 y = 2x + 1; -1<=x<3 y = 2x; x<=-1 y = 2x – 1;。 |
如: |
//创建键盘录入对象 Scanner sc = new Scanner(System.in); System.out.println("请输入x的值:"); int x = sc.nextInt(); //定义一个y int y; //用if语句格式3进行判断 if(x >= 3) { y = 2*x + 1; }else if(x>=-1 && x<3) { y = 2*x; }else { y = 2*x - 1; } |
需求: |
键盘录入月份的值,输出对应的季节。 |
例1: |
//创建键盘录入对象 Scanner sc = new Scanner(System.in); //录入数据 System.out.println("请你输入一个月份:"); int month = sc.nextInt(); if(month<1 ||month>12) { System.out.println("你输入的月份有误"); }else if(month==3 || month==4 || month==5) { System.out.println("春季"); }else if(month==6 || month==7 || month==8) { System.out.println("夏季"); }else if(month==9 || month==10 || month==11) { System.out.println("秋季"); }else { System.out.println("冬季"); } |
例2: |
//创建键盘录入对象 Scanner sc = new Scanner(System.in); //录入数据 System.out.println("请你输入一个月份:"); int month = sc.nextInt(); if(month<1 ||month>12) { System.out.println("你输入的月份有误"); }else if(month>=3 && month<=5) { System.out.println("春季"); }else if(month>=6 && month<=8) { System.out.println("夏季"); }else if(month>=9 && month<=11) { System.out.println("秋季"); }else { System.out.println("冬季"); } |
需求: |
获取三个数据中的最大值 |
例1: |
//三元实现 int temp = (a>b)?a: b; int max = (temp>c)?temp: c; System.out.println("max:"+max); |
例2: |
//用if语句实现 int max; if(a >b) { if(a >c) { max = a; }else { max = c; } }else { if(b >c) { max = b; }else { max = c; } } System.out.println("max:"+max); |
2.switch语句
switch语句格式:
switch(表达式) {
case值1:
语句体1;
break;
case值2:
语句体2;
break;
...
default:
语句体n+1;
break;
}
格式的解释:
switch:表示这是switch选择结构
表达式:这个地方的取值是有限定的
byte,short,int,char
JDK5以后可以是枚举
JDK7以后可以是字符串
case:后面跟的是要和表达式进行比较的值
语句体:要执行的代码
break:表示中断,结束的意思,可以控制switch语句的结束。
default:当所有的值都和表达式不匹配的时候,就执行default控制的语句。其实它就相当于if语句的else。
小小面试题:byte可以作为switch的表达式吗?
long可以作为switch的表达式吗?
String可以作为switch的表达式吗?
答案:byte可以作为switch的表达式
long不可以作为switch的表达式,short、 char 或者 byte他会自动转换为int的,而long不能自动转换为int,因为long比int范围大..可能会丢失精度
JDK7以后可以是字符串
需求: |
键盘录入一个数据,根据这个数据,我们输出对应的星期? |
例1: |
///创建键盘录入对象 Scanner sc = new Scanner(System.in); //控制键盘录入数据 System.out.println("请输入一个数据(1-7):"); int week = sc.nextInt(); // //switch判断语句 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语句的注意事项:
A:case后面只能是常量,不能是变量,而且,多个case后面的值不能出现相同的
B:default可以省略吗?
可以省略,但是不建议,因为它的作用是对不正确的情况给出提示。
特殊情况:
case就可以把值固定。
A,B,C,D
C:break可以省略吗?
可以省略,但是结果可能不是我们想要的。
会出现一个现象:case穿透。
最终我们建议不要省略
D:default一定要在最后吗?
不是,可以在任意位置。但是建议在最后。
E:switch语句的结束条件
a:遇到break就结束了
b:执行到末尾就结束了
例1: |
int x = 2; int y = 3; switch(x){ default: y++; break; //使switch语句结束 case 3: y++; case 4: y++; } System.out.println("y="+y); |
输出结果: |
y=4 |
例2: |
int a = 2; int b = 3; switch(a){ default: b++; case 3: b++; case 4: b++; } System.out.println("b="+b); |
输出结果: |
b=6 |
练习:
模拟单项选择题: |
通过数字65、66、67、68这样的值来转化为字符A、B、C、D //强制转换为字符类型 65à‘A’ 66à‘B’ 67à‘C’ 68à‘D’ char choice = (char) choiceNumber; |
例: |
//出一个选择题,然后供你选择。 System.out.println("下面的几个人你最爱谁?"); System.out.println("65林青霞"); System.out.println("66张曼玉"); System.out.println("67刘德华"); System.out.println("68王力宏"); //键盘录入选择的数据。 Scanner sc = new Scanner(System.in); System.out.println("请输入你的选择:"); int choiceNumber = sc.nextInt(); //强制转换为字符类型 char choice = (char) choiceNumber; switch(choice) { case 'A': System.out.println("恭喜你,选择正确"); break; case 'B': System.out.println("不好意思,你选择有误"); break; case 'C': System.out.println("不好意思,你选择有误"); break; case 'D': System.out.println("不好意思,你选择有误"); break; default: System.out.println("没有该选项"); break; } |
练习2:
习题: |
用switch语句实现键盘录入月份,输出对应的季节 |
例1: |
//创建键盘录入对象 Scanner sc = new Scanner(System.in); //录入数据 System.out.println("请输入月份(1-12):"); int month = sc.nextInt(); switch(month) { 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; case 8: System.out.println("夏季"); break; case 9: System.out.println("秋季"); break; case 10: System.out.println("秋季"); break; case 11: System.out.println("秋季"); break; case 12: System.out.println("冬季"); break; default: System.out.println("你输入的月份有误"); } |
例2: |
switch(month) { case 1: case 2: case 12: System.out.println("冬季"); break; case 3: case 4: case 5: System.out.println("春季"); break; case 6: case 7: case 8: System.out.println("夏季"); break; case 9: case 10: case 11: System.out.println("秋季"); break; default: System.out.println("你输入的月份有误"); } |
if语句和switch语句的区别?
if语句:
A:针对结果是boolean类型的判断
B:针对一个范围的判断
C:针对几个常量值的判断
switch语句:
针对几个常量值的判断