开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第12天,点击查看活动详情
嵌套分支
在一个分支结构中又完整的嵌套了另一个完整的分支结构,里面的分支的结构称为内层分支外面的分支结构称为外层分支,规范:不要超过三层(可读性不好)
基本语法:
if(){
if(){
//if-else……
}else{
//if-else
}
}
嵌套分支案例:NestedIf.java
import java.util.Scanner;
public class NestedIf {
public static void main(String[] args) {
//创建Scanner对象
Scanner scanner = new Scanner(System.in);
System.out.println("请输入您的性别,0:男,1:女");
int gender = scanner.nextInt();
char gen = scanner.next().charAt(0);
System.out.println("请输入您的成绩:");
double score = scanner.nextDouble();
if (gender == 0){
System.out.println("您进入的是男子组");
if (score > 8.0){
System.out.println("恭喜您进入决赛");
}
else {
System.out.println("您被淘汰了");
}
}else {
System.out.println("您进入的是女子组");
if (score > 8.0){
System.out.println("恭喜您进入决赛");
}
else {
System.out.println("您被淘汰了");
}
}
}
}
switch分支结构
基本语法:
switch(表达式){
case 常量一:
语句块一;
break;
case 常量二;
语句块二;
break;
default;
default语句块;
break;
}
解析:
- switch关键字,表示switch分支
- 表达式对应一个值
- case 常量一:当表达式等于常量一时,就执行语句块一
- break:表示退出switch
- 如果和case 常量一匹配,就执行语句块一,如果没有匹配,就继续匹配case 常量二
- 如果都没有匹配上,执行defaule
案例:Switch01.java
import java.util.Scanner;
public class Switch01 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入:");
char week = scanner.next().charAt(0);
switch (week){
case 'a':
System.out.println("今天星期一,要加油哦!");
break;
case 'b':
System.out.println("今天星期二,要加油哦!");
break;
case 'c':
System.out.println("今天星期三,要加油哦!");
break;
case 'd':
System.out.println("今天星期四,要加油哦!");
break;
case 'e':
System.out.println("今天星期五,要加油哦!");
break;
case 'f':
System.out.println("今天星期六,放松一下吧");
break;
case 'g':
System.out.println("今天星期日,放松一下吧");
break;
default:
System.out.println("您的输入不正确,请重新输入!");
}
}
}
编写一个程序,该程序可以接受一个字符,比如a,b,c,d,e,f,g
a表示星期一,b表示星期二
根据用户的输入显示相依的信息,要求使用switch完成
switch细节
- 表达式数据类型,应该和case后的常量类型一致,或者可以自动转成可以相互比较的类型,比如输入的时字符,而常量是int
- switch(表达式)中的表达式的返回值必须是(byte short int char enum(枚举类型) String)
- case句子中的值必须是常量,而不能是变量
- default子句是可以选的,当没有匹配的case时,执行default
- break语句用来在执行完一个case分支后使程序跳出switch语句块,如果没有写break,程序会顺序执行到switch结尾
switch练习:SwitchExercise.java
import java.util.Scanner;
public class SwitchExercise {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入a-e");
char c1 = scanner.next().charAt(0);
System.out.println("请输入成绩");
int achievement = scanner.nextInt();
switch (c1){
case 'a':
System.out.println("A");
break;
case 'b':
System.out.println("B");
break;
case 'c':
System.out.println("C");
break;
case 'd':
System.out.println("D");
break;
case 'e':
System.out.println("E");
break;
default:
System.out.println("您的输入不正确,请重新输入!");
}
if (achievement >= 0 & achievement <= 100){
switch(achievement/60){
case 0:
System.out.println("不及格");
break;
case 1:
System.out.println("及格");
break;
default:
System.out.println("输入错误,请重新输入");
}
}
else {
System.out.println("输入有误");
}
}
}
使用switch把小写类型的char型转为大写(键盘输入)值转换a,b,c,d,e,其他的输出other
对于学生成绩大于60的输出合格,低于60的输出不合格(输入的成绩不能大于100)提示,成绩/60
switch练习:SwitchExercise02.java
import java.util.Scanner;
public class SwitchExercise02 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入月份:");
int month = scanner.nextInt();
switch(month){
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;
case 12:
case 1:
case 2:
System.out.println("冬季");
break;
default:
System.out.println("请输入正确的月份");
}
}
}
根据用于指定月份打印该月所属的季节,345春季,678夏季,91011秋季,1212冬季
switch和if的比较
- 如果判断的具体数值不多,而且符合byte,short,int,char,enum,String这六种类型,虽然两种语句都可以使用,建议使用switch语句
- 其他情况:对区间判断,对结果为boolean类型判断,使用if,if的适用范围广泛