分支结构
一、if语句
(1)if语句格式1
格式:
if(关系表达式){
语句体;
}
执行流程:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-plQT46jf-1615184258088)(07_分支结构/if语句1.jpg)]
- 首先计算关系表达式的值。
- 如果关系表达式的值为true就执行语句体。
- 如果关系表达式的值为false就不执行语句体。
- 继续执行后面的语句。
if语句格式1 示例1:
-
需求:输入两个数,代表“斗地主”游戏中的牌的点数,分别用变量a和b接收。如果 a 和 b相等,就输出“你摸了一个对子”。
-
代码:
public static void main(String[] args) { //需求:输入两个数代表“斗地主”游戏中的牌的点数,分别用变量a和b接收。如果 a 和 b相等,就输出“你摸了一个对子”。 int a = 0; int b = 0; Scanner scanner = new Scanner(System.in); System.out.print("请输入2个整数,用空格分隔:"); a = scanner.nextInt(); b = scanner.nextInt(); if(a == b) { System.out.println("你摸了一个对子"); } System.out.println("无论if是否成立,后面的代码都会执行"); }
if语句格式1 示例2:
-
需求:输入3个数,分别用变量a,b,c接收。如果a > b,输出"a > b",如果a > c,输出“a > c”。
-
代码:
public static void main(String[] args) { // 需求:输入3个数,分别用变量a,b,c接收。如果a > b,输出"a > b",如果a > c,输出“a > c”。 int a = 0; int b = 0; int c = 0; Scanner scanner = new Scanner(System.in); System.out.print("请输入3个数,用空格隔开"); a = scanner.nextInt(); b = scanner.nextInt(); c = scanner.nextInt(); if(a > b) { System.out.println("a > b"); } if(a > c) { System.out.println("a > c"); } System.out.println("无论if是否成立,后面的代码都会执行!"); }
if语句格式1 示例3:
-
需求:有一个变量num,初始值是23。输入一个整数,如果输入的数字大于23,将num改为输入的数。
-
代码:
public static void main(String[] args) { //需求:有一个变量num,初始值是23。输入一个整数,如果输入的数字大于23,将num改为输入的数。 int num = 23; Scanner scanner = new Scanner(System.in); System.out.print("请输入一个整数:"); int temp = scanner.nextInt(); if(temp > num) { num = temp; } System.out.println("num的值是:" + num); }
if语句格式1总结
- if 后面的小括号里放的是一个 结果为true或者false的表达式。----通常是关系表达式 或者 逻辑表达式。
- if条件的值为true,执行后面大括号里面的语句。—大括号里可以写一条或多条语句。
- 无论if是否成立,if语句前面的代码、if语句后面的代码都会执行。
(2)if语句格式2
格式:
if(关系表达式){
语句体1;
}else{
语句体2;
}
执行流程:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1uvqWfd0-1615184258096)(07_分支结构/if语句2.jpg)]
- 首先计算判定条件的值(往往是关系表达式或逻辑表达式)。
- 如果判定条件的值为true,执行if语句体1,否则执行语句体2。
- 继续执行后面的语句。
if语句格式2 示例1:
-
需求:输入2个整数,分别用变量a和b接收数据,输出a和b中的最大值。—不使用三目运算符。
-
代码:
public static void main(String[] args) { //需求:输入2个整数,分别用变量a和b接收数据,输出a和b中的最大值。---不使用三目运算符。 int a = 0; int b = 0; int max = 0; Scanner scanner = new Scanner(System.in); System.out.print("请输入2个整数,用空格进行分隔:"); a = scanner.nextInt(); b = scanner.nextInt(); if(a > b) { max = a; }else { max = b; } System.out.println("最大值是:" + max); }
if语句格式2 示例2:
-
需求:输入一个整数,判断输入的数是不是偶数,如果是偶数,输出"您输入的是一个偶数",如果不是偶数,输出"您输入的是一个奇数"。
-
代码:
public static void main(String[] args) { //需求:输入一个整数,判断输入的数是不是偶数,如果是偶数,输出"您输入的是一个偶数",如果不是偶数,输出"您输入的是一个奇数"。 int num = 0; Scanner scanner = new Scanner(System.in); System.out.print("请输入一个整数:"); num = scanner.nextInt(); //偶数的判定条件:对2求余,余数是否是0 if(num % 2 == 0) { System.out.println("您输入的是一个偶数"); }else { System.out.println("您输入的是一个奇数"); } }
if语句格式2 示例3:
-
需求:输入一个代表年份的数字,判断是不是闰年。(闰年的判断条件是:能被400整除,或者能被4整除且不能被100整除)。如果是闰年,输处"xxx年是闰年!",如果不是闰年,输出"xxx年是平年!"。
-
代码:
public static void main(String[] args) { //需求:输入一个代表年份的数字,判断是不是闰年。(闰年的判断条件是:能被400整除,或者能被4整除且不能被100整除) //如果是闰年,输处"xxx年是闰年!" //如果不是闰年,输出"xxx年是平年!" int year = 0; Scanner scanner = new Scanner(System.in); System.out.print("请输入一个代表年份的数字:"); year = scanner.nextInt(); if((year % 400 == 0) || (year % 4 == 0 && year % 100 != 0)) { System.out.println(year + "年是闰年!"); }else { System.out.println(year + "年是平年!"); } }
if语句格式2 示例4:
-
需求:输入一个整数,判断这个数字是不是7的倍数。如果是7的倍数,输出"过",否则输出数字本身。
-
代码:
public static void main(String[] args) { //需求:输入一个整数,判断这个数字是不是7的倍数。如果是7的倍数,输出"过",否则输出数字本身。 int num = 0; Scanner scanner = new Scanner(System.in); System.out.print("请输入一个整数:"); num = scanner.nextInt(); if(num % 7 == 0) { System.out.println("过"); }else { System.out.println(num); } }
if语句格式2 示例5:
-
需求:输入一个100以内的整数,判断这个数字里面是不是包含7。个位为7或者是十位为7。如果包含7输出“过”,如果不包含7,直接输出数字本身。
-
代码:
public static void main(String[] args) { //需求:输入一个100以内的整数,判断这个数字里面是不是包含7。个位为7或者是十位为7。 //如果包含7输出“过”,如果不包含7,直接输出数字本身。 int num = 0; Scanner scanner = new Scanner(System.in); System.out.print("请输入一个100以内的整数:"); num = scanner.nextInt(); if(num % 10 == 7 || num / 10 == 7) { System.out.println("过"); }else { System.out.println(num); } }
if语句格式2 示例6:
-
需求:输入一个100以内的整数,如果这个数字包含7或者是7的倍数,输出"过",否则输出数字本身。
-
代码:
public static void main(String[] args) { //需求:输入一个100以内的整数,如果这个数字包含7或者是7的倍数,输出"过",否则输出数字本身。 int num = 0; Scanner scanner = new Scanner(System.in); System.out.print("请输入一个100以内的整数:"); num = scanner.nextInt(); if(num % 7 == 0 || (num % 10 == 7 || num / 10 == 7)) { System.out.println("过"); }else { System.out.println(num); } }
if语句格式2总结
- if 后面的小括号里放的是一个 结果为true或者false的表达式。----通常是关系表达式 或者 逻辑表达式。
- if条件的值为true,执行if后面大括号里面的语句。—大括号里可以写一条或多条语句。
- if条件的值为false,执行else后面大括号里面的语句。—大括号里可以写一条或多条语句。
- 无论if是否成立,if语句前面的代码、else语句后面的代码都会执行。
(3)if语句格式3
格式:
if(条件表达式1){
语句体1;
}else if(条件表达式2){
语句体2;
}else if(条件表达式3){
语句体3;
}
...
else{
语句体n+1;
}
执行流程:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TU1Xz1BR-1615184258107)(07_分支结构/if语句3.jpg)]
- 首先计算条件表达式1的值。
- 如果条件表达式1的结果为true,执行语句体1。如果条件表达式1的值为false,就计算条件表达式2的值。
- 如果条件表达式2的结果为true,执行语句体2。如果条件表达式2的值为false,就计算条件表达式3的值。
- …
- 如果没有任何条件表达式的值为true,则执行语句体n+1。
if语句格式3 示例1:
-
需求:输入一个整数,判断是正数、负数还是0。如果输入的数大于0,输出"您输入的是一个正数",如果输入的数小于0,输出"您输入的是一个负数",否则输出"您输入的是0"。
-
代码:
public static void main(String[] args) { //需求:输入一个整数,判断是正数、负数还是0。 //如果输入的数大于0,输出"您输入的是一个正数",如果输入的数小于0,输出"您输入的是一个负数",否则输出"您输入的是0"。 int num = 0; Scanner scanner = new Scanner(System.in); System.out.print("请输入一个整数:"); num = scanner.nextInt(); if(num > 0) { System.out.println("您输入的是一个正数"); }else if(num < 0) { System.out.println("您输入的是一个负数"); }else { System.out.println("您输入的是0"); } }
if语句格式3 示例2:
-
需求:输入一个1~7之间的整数(含1和7),如果输入的是1,就输出"今天是星期一",如果输入的是2,就输出"今天是星期二",…,如果输入的是7,就输出"今天是星期天"。如果输入的是其他数字,就输出"输入的数字非法"。
-
代码:
public static void main(String[] args) { //需求:输入一个1~7之间的整数(含1和7),如果输入的是1,就输出"今天是星期一", //如果输入的是2,就输出"今天是星期二",...,如果输入的是7,就输出"今天是星期天"。 //如果输入的是其他数字,就输出"输入的数字非法" int day = 0; Scanner scanner = new Scanner(System.in); System.out.print("输入一个1~7之间的整数(含1和7):"); day = scanner.nextInt(); if(day == 1) { System.out.println("今天是星期一"); }else if(day == 2) { System.out.println("今天是星期二"); }else if(day == 3) { System.out.println("今天是星期三"); }else if(day == 4) { System.out.println("今天是星期四"); }else if(day == 5) { System.out.println("今天是星期五"); }else if(day == 6) { System.out.println("今天是星期六"); }else if(day == 7) { System.out.println("今天是星期日"); }else { System.out.println("输入的数字非法"); } }
if语句格式3 示例3:
-
需求:根据考试成绩计算应该给与什么奖励:考试100分,奖励一架航拍遥控飞机;考试90分99分,奖励游乐场玩一次;考试80分89分,奖励玩具赛车一辆;考试70分~79分,奖励玩手机30分钟;考试70分以下,挨揍一顿。
-
代码:
public static void main(String[] args) { //需求:根据考试成绩计算应该给与什么奖励: //考试100分,奖励一架航拍遥控飞机;考试90分~99分,奖励游乐场玩一次; //考试80分~89分,奖励玩具赛车一辆;考试70分~79分,奖励玩手机30分钟;考试70分以下,挨揍一顿。 int score = 0; Scanner scanner = new Scanner(System.in); System.out.print("请输入考试成绩:"); score = scanner.nextInt(); if(score == 100) { System.out.println("考试" + score + "分,奖励一架航拍遥控飞机!"); }else if(score >= 90) { System.out.println("考试" + score + "分,奖励游乐场玩一次!"); }else if(score >= 80) { System.out.println("考试" + score + "分,奖励玩具赛车一辆!"); }else if(score >= 70) { System.out.println("考试" + score + "分,奖励玩手机30分钟!"); }else { System.out.println("考试" + score + "分,挨揍一顿!"); } }
if语句格式3 示例4:
-
某体育彩票中心推出优惠充值活动,充值50元送20元,充值100元送50元,充值500元送300元。如果账户余额是26元,请输入一个充值金额,计算最终账户余额。
-
代码:
public static void main(String[] args) { //某体育彩票中心推出优惠充值活动,充值50元送20元,充值100元送50元,充值500元送300元。 //如果账户余额是26元,请输入一个充值金额,计算最终账户金额。 int money = 26; Scanner scanner = new Scanner(System.in); System.out.print("请输入充值金额:"); int num = scanner.nextInt(); if(num >= 500) { money += (num + 300); }else if(num >= 100) { money += (num + 50); }else if(num >= 50) { money += (num + 20); }else { money += num; } System.out.println("充值成功,当前账户余额是:" + money); }
if语句格式3 示例5:
-
出租车计费标准为:3公里以内10元,3公里以后每1公里加2元,超过15公里,每1公里加3元。请输入一个最终公里数,计算应付的车费。
-
代码:
public static void main(String[] args) { //出租车计费标准为:3公里以内10元,3公里以后每1公里加2元,超过15公里,每1公里加3元。 //请输入一个最终公里数,计算应付的车费。 int distance = 0; int pay = 0; Scanner scanner = new Scanner(System.in); System.out.print("请输入里程数:"); distance = scanner.nextInt(); if(distance > 15) { pay = (distance - 15) * 3 + (15 - 3) * 2 + 10; }else if(distance > 3) { pay = (distance - 3) * 2 + 10; }else { pay = 10; } System.out.println("您的乘车里程是" + distance + "公里,费用是" + pay + "元。"); }
if语句格式3 示例6:
-
出租车计费标准为:3公里以内10元,3公里以后每1公里加2元,超过15公里,每1公里加3元,行驶过程中每等待5分钟,需要增加2元(等待12分钟,加4元,非6元)。请输入一个最终公里数和行驶中的等待时间,计算应付的车费。
-
代码:
public static void main(String[] args) { //出租车计费标准为:3公里以内10元,3公里以后每1公里加2元,超过15公里,每1公里加3元, //行驶过程中每等待5分钟,需要增加2元(等待12分钟,加4元,非6元)。 //请输入一个最终公里数和行驶中的等待时间,计算应付的车费。 int distance = 0; int waitingTime = 0; int pay = 0; Scanner scanner = new Scanner(System.in); System.out.print("请输入里程数:"); distance = scanner.nextInt(); System.out.print("请输入行驶中的等待时间:"); waitingTime = scanner.nextInt(); if(distance > 15) { pay = (distance - 15) * 3 + (15 - 3) * 2 + 10; }else if(distance > 3) { pay = (distance - 3) * 2 + 10; }else { pay = 10; } pay += (waitingTime / 5) * 2; System.out.println("您的乘车里程是" + distance + "公里,行驶中的等待时长是" + waitingTime + "分钟,费用是" + pay + "元。"); }
if语句格式3总结
- 首先计算条件表达式1的值。
- 如果条件表达式1的结果为true,执行语句体1。如果条件表达式1的值为false,就计算条件表达式2的值。
- 如果条件表达式2的结果为true,执行语句体2。如果条件表达式2的值为false,就计算条件表达式3的值。
- …
- 如果没有任何条件表达式的值为true,则执行语句体n+1。
(4)if语句总结
- if语句是编程中最常用的语句。
- 无论是哪种if语句格式,判断条件都是 条件表达式或者逻辑表达式。
- 要学会根据情况分析使用哪种if语句格式。
二、switch…case语句
switch…case分支语句,也被称为多路分支语句。
switch本身的含义是开关。在Java中switch…case语句很像生活中的开关,按不同的开关按钮,有不同的效果。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qzOyFJWD-1615184258130)(07_分支结构/开关.jpg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sAXQ6g5o-1615184258135)(07_分支结构/开关2.jpg)]
(1)switch…case的语法格式
switch(表达式){
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
case 值3:
语句体3;
break;
...
default:
语句体n+1;
break;
}
(2)switch…case的执行流程
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YF05012S-1615184258141)(07_分支结构/switch…case.jpg)]
- 计算switch表达式的值。注意:与if语句不同,不在是true和false,而是数值、字符、字符串等。
- 表达式的值与某case的值一样时,执行对应case中的语句体。
- break用于结束switch语句,继续执行switch语句后面的代码。
- 如果没有任何一个case的值和表达式的值一致,执行default对应的语句体。default表示其他情况,即除了罗列的case之外的所有情况。
(3)switch…case示例:
switch…case示例1:
-
需求:输入一个1~7之间的整数(含1和7),如果输入的是1,就输出"今天是星期一",如果输入的是2,就输出"今天是星期二",…,如果输入的是7,就输出"今天是星期天"。如果输入的是其他数字,就输出"输入的数字非法"。(使用switch…case来实现。)
-
代码:
public static void main(String[] args) { //需求:输入一个1~7之间的整数(含1和7),如果输入的是1,就输出"今天是星期一", //如果输入的是2,就输出"今天是星期二",...,如果输入的是7,就输出"今天是星期天"。 //如果输入的是其他数字,就输出"输入的数字非法"。(使用switch..case来实现。) int day = 0; Scanner scanner = new Scanner(System.in); System.out.print("请输入1~7之间的数字(含1和7):"); day = scanner.nextInt(); switch(day) { 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示例2:
-
豆瓣电影中有很多分类,比如:正在热映、每周排行榜、北美排行榜、国产排行榜、高分榜等。根据用户输入的字符串,输出对应的榜单名称。hot代表正在热映、weekly代表每周排行榜、us代表北美排行榜、china代表国产排行榜、highScore代表高分排行榜,输入其他内容,输出"输入有误!"。
-
代码:
public static void main(String[] args) { //豆瓣电影中有很多分类,比如:正在热映、每周排行榜、北美排行榜、国产排行榜、高分榜等。 //根据用户输入的字符串,输出对应的榜单名称。hot代表正在热映、weekly代表每周排行榜、 //us代表北美排行榜、china代表国产排行榜、highScore代表高分排行榜,输入其他内容,输出"输入有误!"。 String category = ""; Scanner scanner = new Scanner(System.in); System.out.print("请输入分类:"); category = scanner.nextLine(); switch(category) { case "hot": System.out.println("正在热映"); break; case "weekly": System.out.println("每周排行榜"); break; case "us": System.out.println("北美排行榜"); break; case "china": System.out.println("国产排行榜"); break; case "highScore": System.out.println("高分排行榜"); break; default: System.out.println("输入有误!"); break; } }
switch…case示例3:
-
需求:从键盘输入一个代表月份的数字,根据输入的结果,输出这个月有多少天(假定是平年)?例如:1月31天,2月28天,3月31天…
-
代码:
public static void main(String[] args) { //需求:从键盘输入一个代表月份的数字,根据输入的结果,输出这个月有多少天(假定是平年)? //例如:1月31天,2月28天,3月31天.. int month = 0; Scanner scanner = new Scanner(System.in); System.out.print("请输入一个月份:"); month = scanner.nextInt(); switch(month) { case 1: System.out.println(month + "月有31天。"); break; case 2: System.out.println(month + "月有28天。"); break; case 3: System.out.println(month + "月有31天。"); break; case 4: System.out.println(month + "月有30天。"); break; case 5: System.out.println(month + "月有31天。"); break; case 6: System.out.println(month + "月有30天。"); break; case 7: System.out.println(month + "月有31天。"); break; case 8: System.out.println(month + "月有31天。"); break; case 9: System.out.println(month + "月有30天。"); break; case 10: System.out.println(month + "月有31天。"); break; case 11: System.out.println(month + "月有30天。"); break; case 12: System.out.println(month + "月有31天。"); break; default: System.out.println("输入的月份非法。"); break; } }
switch…case语句中,switch后面的表达式的值是一个数值或者字符或者字符串。
表达式的值对应哪个case,就跳转到对应的case去执行。
如果没有任何一个case和表达式的值对应,就执行default对应的语句体。default一般写在所有case的后面。
default可以省略不写,相当于不处理其他情况。
(4)break关键字
break关键字有2个用途:
- 用于switch…case语句中的case语句块里,作用是结束switch的执行。
- 用于循环结构,结束循环。—循环的时候讲。
case中也可以不写break,不写break的话,switch不会结束执行,而是顺序往下执行代码,直到遇到break结束switch语句(或者顺序执行完整个switch…case语句)。
除非特殊需求需要省去break,否则每个case都要写上break。
break示例1:
-
需求:从键盘输入一个代表月份的数字,根据输入的结果,输出这个月有多少天(假定是平年)?例如:1月31天,2月28天,3月31天…
-
代码:
public static void main(String[] args) { //需求:从键盘输入一个代表月份的数字,根据输入的结果,输出这个月有多少天(假定是平年)? //例如:1月31天,2月28天,3月31天.. int month = 0; Scanner scanner = new Scanner(System.in); System.out.print("请输入一个月份:"); month = scanner.nextInt(); switch(month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: System.out.println(month + "月有31天。"); break; case 2: System.out.println(month + "月有28天。"); break; case 4: case 6: case 9: case 11: System.out.println(month + "月有30天。"); break; default: System.out.println("输入的月份非法。"); break; } }
break示例2:
-
需求:从键盘输入一个代表月份的数字,根据输入的结果,判断这个月份是什么季节。春季(35)、夏季(68)、秋季(911)、冬季(122)。
-
代码:
public static void main(String[] args) { //需求:从键盘输入一个代表月份的数字,根据输入的结果,判断这个月份是什么季节。 //春季(3~5)、夏季(6~8)、秋季(9~11)、冬季(12~2)。 int month = 0; Scanner scanner = new Scanner(System.in); System.out.print("请输入一个月份:"); month = scanner.nextInt(); 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; } }
case连写的情况适用于多个case执行同样的代码。即省略break,不结束switch,让代码继续往下执行。
其他情况下,每个case都要有自己单独的代码和break
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8huAv2XB-1615184258151)(07_分支结构/switch…case2.jpg)]
(5)switch…case总结
- switch…case语句和if语句作用一样,都是实现分支。
- swicth…case语句中通过break关键字结束switch的执行。
- switch中表达式的值决定了进入哪个case执行。
- 没有对应的case就执行default,default一般写在所有case后面。
三、分支结构总结
在Java语言中,分支结构一共有2种:if语句和switch…case语句。
if语句有3种书写格式:if、if…else、if…else if…else if…else
无论哪种if格式,if后面表达式的值必须是一个boolean值,即true或false。
switch…case语句是多路分支,根据switch的值,决定进哪个case执行代码。没有对应的case就执行default。
break用于结束switch的执行。
虽然可以省略break,但要慎重。