java流程控制-分支控制
免责声明:java基础资料均来自于韩顺平老师的《循序渐进学Java零基础》教案,具体视频内容可以去B站观看,这些资料仅用于学习交流,不得转载用于商业活动
1.分支控制
让程序有选择的去执行,分支控制有三种
单分支 if
双分支 if-else
多分支if-else if-...else
1.1 单分支 if
基本语法
if(条件表达式){
执行代码块(可以有多条语句)
}
说明:当条件表达式为true时,就会执行{}的代码,如果为false,就不执行
特别说明:如果{}中只有一条语句则可以不用{},为了代码可读性,建议加上{}
public class If01 { public static void main(String[] args) { Scanner sc=new Scanner(System.in); System.out.print("请输入你的年龄:"); int age=sc.nextInt(); if(age>=18){ System.out.println("你的年龄大于或等于18岁,可以进入网吧"); } } }
1.2 双分支 if-else
public class If01 { public static void main(String[] args) { Scanner sc=new Scanner(System.in); System.out.print("请输入你的年龄:"); int age=sc.nextInt(); if(age>=18){ System.out.println("你的年龄大于或等于18岁,可以进入网吧"); }else{ System.out.println("你还是未成年,不能进入网吧"); } } }
1.3 多分支 if-else if...-else
多分枝流程图
1 public class If02 { 2 public static void main(String[] args) { 3 /* 4 * 输入个人成绩 5 * 成绩为(90-100)分时,输出 成绩优秀 6 * 成绩为(80-89)分时,输出,成绩良好 7 * 成绩为(70-79)分时,输出,成绩中等 8 * 成绩为(60-69)分时,输出,成绩及格 9 * 其他情况 输出 成绩不及格 10 * */ 11 12 Scanner sc=new Scanner(System.in); 13 System.out.print("请输入你的个人成绩(0-100):"); 14 int score=sc.nextInt(); 15 if(score>=0 && score<=100){ 16 if(score>=90 && score<=100) { 17 System.out.println("成绩优秀"); 18 }else if(score>=80 && score<=89){ 19 System.out.println("成绩良好"); 20 }else if(score>=70 && score<=79){ 21 System.out.println("成绩中等"); 22 }else if(score>=60 && score<=69){ 23 System.out.println("成绩及格"); 24 }else{ 25 System.out.println("成绩不及格"); 26 } 27 }else{ 28 System.out.println("个人成绩分数需要在0-100,请重新输入"); 29 } 30 } 31 }
1.3 嵌套分支
在一个分支结构中有完整的嵌套了另一个完整的分支结构,里面的分支的结构称为内层分支,外面的分支结构称为外层分支。分支最好不要超过三层
基本语法:
public class If03 { public static void main(String[] args) { /* * 参加比赛。如果积分大于等于70可以进入世界赛 * 否则提示:很抱歉,您的队伍没有参加世界上的资格。并且根据排名提示 * 1 欢迎1号种子进入世界赛 * 2 欢迎2号种子进入世界赛 * 3 欢迎3号种子进入世界赛 * 4 欢迎4号种子进入世界赛 * 其他 很抱歉。输入错误 * */ Scanner sc=new Scanner(System.in); System.out.print("请输入您队伍的积分,查询是否有资格参加世界赛的资格:"); int score=sc.nextInt(); if(score>=70){ System.out.print("请输入你队伍的排名:"); int level=sc.nextInt(); if(level==1){ System.out.println("欢迎1号种子进入世界赛"); }else if(level==2){ System.out.println("欢迎2号种子进入世界赛"); }else if(level==3){ System.out.println("欢迎3号种子进入世界赛"); }else if(level==4){ System.out.println("欢迎4号种子进入世界赛"); }else { System.out.println("很抱歉,排名输入错误!"); } }else{ System.out.println("很抱歉,您的队伍没有参加世界上的资格"); } } }
1.3 switch分支结构
基本语法:
说明:
- swtich,关键字,表示switch分支
- 表达式对应一个具体的值
- case常量1:当表达式的值等于常量1,就执行语句块1
- break:表示退出switch
- 如果和case常量1匹配,就执行语句块1,如果没有匹配就继续匹配case常量2
- 如果都没有匹配商,执行default
流程图:
1 public class Switch01 { 2 public static void main(String[] args) { 3 /*参加世界赛,并且根据排名提示 4 * 1 欢迎1号种子进入世界赛 5 * 2 欢迎2号种子进入世界赛 6 * 3 欢迎3号种子进入世界赛 7 * 4 欢迎4号种子进入世界赛 8 * 其他 很抱歉。您输入的排名不能进入世界赛 9 * */ 10 Scanner sc=new Scanner(System.in); 11 System.out.print("请输入您队伍的积分排名:"); 12 int level=sc.nextInt(); 13 14 switch(level){ 15 case 1: 16 System.out.println("欢迎1号种子进入世界赛"); 17 break; 18 case 2: 19 System.out.println("欢迎2号种子进入世界赛"); 20 break; 21 case 3: 22 System.out.println("欢迎3号种子进入世界赛"); 23 break; 24 case 4: 25 System.out.println("欢迎4号种子进入世界赛"); 26 break; 27 default: 28 System.out.println("很抱歉,您输入的排名不能进入世界赛!"); 29 } 30 } 31 }
注意事项:
- 表达式数据类型,应和case后的常量类型保持一直,或者可以自动转成可以相互比较的类型,比如输入的是字符,而常量是int
- switch(表达式)中表达式的返回值必须是(byte,short,int,char,enum[枚举],String)
- case子句中的值必须是常量,而不能是变量
- default子句是可选的,当没有匹配的case时,执行default
- break语句用来在执行完一个case分支后使程序跳出switch语句块;如果没有写break,程序会顺序执行到switch结尾,除非遇到break
1 public class Switch02 { 2 public static void main(String[] args) { 3 //根据输入的月份打印季节, 4 // 3,4,5春季 6,7,8 夏季 9 10 11 秋季 12,1,2冬季 5 Scanner sc=new Scanner(System.in); 6 System.out.print("请输入月份:"); 7 int month=sc.nextInt(); 8 9 switch(month){ 10 case 3: 11 case 4: 12 case 5: 13 System.out.println("这是春季"); 14 break; 15 case 6: 16 case 7: 17 case 8: 18 System.out.println("这是夏季"); 19 break; 20 case 9: 21 case 10: 22 case 11: 23 System.out.println("这是秋季"); 24 break; 25 case 12: 26 case 1: 27 case 2: 28 System.out.println("这是冬季"); 29 break; 30 default: 31 System.out.println("月份输入错误"); 32 } 33 } 34 }
switch和if比较:
- 如果判断的具体数值不多,而且符合byte,short,int,char,enum[枚举],String这6种类型。虽然两个语句都可以使用,建议使用switch
- 其他情况:对区间判断,对结果为boolean类型判断,使用if。if的使用范围更广泛