一.Java中的选择结构
1.if控制语句(if语句只能处理boolean类型的结果值)
(1)单分支if结构
if(表达式){ 语句 }
注意:表达式必须是布尔类型的表达式。
(2)结构流程图
(3)双分支结构
if(表达式){ 语句1 }else{ 语句2 }
(4)流程结构图
(5)多分支if结构
if(表达式1){ 语句1 }else if(表达式2){ 语句2 }else{ 语句3 }
(6)流程结构图
2.switch语句(switch语句只能处理byte、short、int、char类型和枚举类型、string类型的数据比较)
(1)语句结构
写法一:
switch(表达式){ case 常量1: 语句; break; case 常量2: 语句; break; …… default: 语句; break; }
写法二(Java7更新):
switch(表达式){ case 常量1-> 语句; case 常量2-> 语句; case 常量3-> 语句; case 常量4-> 语句; default -> 语句; }
注意:switch
表达式可返回一个简单的值,用变量来接收;switch
变成一个语句,后面要写分号。
(2)结构流程图
(3)yield可在switch内部返回一个简单的值。
二.练习
1.编写一个简单的计算器程序,要求用户输入两个数和操作符(+、-、*、/),然后根据操 作符进行相应的运算,并输出结果。如果输入的运算符不是有效的运算符,则输出"无效的 运算符"。
package com.kfm.java; import java.util.Scanner; /** * @author wang */ public class Doem1 { public static void main(String[] args) { /* 编写一个简单的计算器程序,要求用户输入两个数和操作符(+、-、*、/),然后根据操 作符进行相应的运算,并输出结果。如果输入的运算符不是有效的运算符,则输出"无效的 运算符"。 */ Scanner input = new Scanner(System.in); System.out.println("请输入第一个数:"); double num1 = input.nextDouble(); System.out.println("请输入操作符(+、-、*、/):"); String operator = input.next(); System.out.println("请输入第二个数"); double num2 = input.nextDouble(); switch (operator) { case "+" -> { double a = num1 + num2; System.out.printf("计算结果为:%f \n", a); } case "-" -> { double b = num1 - num2; System.out.printf("计算结果为:%f \n", b); } case "*" -> { double c = num1 * num2; System.out.printf("计算结果为:%f \n", c); } case "/" -> { double d = num1 / num2; System.out.printf("计算结果位:%f \n", d); } default -> System.out.println("无效的运算符号"); } } }
2.编写一个程序,根据用户输入的月份(1 到 12),输出该月份所属的季节。假设春季是 3 到 5 月,夏季是 6 到 8 月,秋季是 9 到 11 月,冬季是 12、1 和 2月。如果输入的月份超 出了范围,输出"输入错误"。
package com.kfm.java; import java.util.Scanner; /** * @author wang */ public class Doem2 { public static void main(String[] args) { /* 编写一个程序,根据用户输入的月份(1 到 12),输出该月份所属的季节。假设春季是 3 到 5 月,夏季是 6 到 8 月,秋季是 9 到 11 月,冬季是 12、1 和 2月。如果输入的月份超 出了范围,输出"输入错误"。 */ Scanner input = new Scanner(System.in); System.out.println("请输入月份:"); int month = input.nextInt(); switch (month){ case 3,4,5 -> System.out.println("春季"); case 6,7,8 -> System.out.println("夏季"); case 9,10,11 -> System.out.println("秋季"); case 12,1,2 -> System.out.println("冬季"); default -> System.out.println("输入错误"); } } }
3.编写一个程序,根据用户输入的月份和日期,输出该日期所在的星座。以下是一个简单的 星座日期范围参考:
package com.kfm.java; import java.util.Scanner; /** * @author wang */ public class Doem3 { public static void main(String[] args) { /* 编写一个程序,根据用户输入的月份和日期,输出该日期所在的星座。 水瓶座(1月20日到2月18日) 双鱼座(2月19日到3月20日) 白羊座(3月21日到4月19日) 金牛座(4月20日到5月20日) 双子座(5月21日到6月20日) 巨蟹座(6月21日到7月22日) 狮子座(7月23日到8月22日) 处女座(8月23日到9月22日) 天秤座(9月23日到10月22日) 天蝎座(10月23日到11月21日) 射手座(11月22日到12月21日) 魔羯座(12月22日到1月19日) */ Scanner input = new Scanner(System.in); System.out.println("请输入月份:"); int month = input.nextInt(); System.out.println("请输入日期:"); int date = input.nextInt(); if(month == 1 & date >= 20 | month == 2 & date <= 18){ System.out.println("水瓶座"); }else if(month == 2 & date >= 19 | month == 3 & date <= 20){ System.out.println("双鱼座"); }else if(month == 3 & date >= 21 | month == 4 & date <= 19){ System.out.println("白羊座"); }else if(month == 4 & date >= 20 | month == 5 & date <= 20){ System.out.println("金牛座"); }else if(month == 5 & date >= 21 | month == 6 & date <= 20){ System.out.println("双子座"); }else if(month == 6 & date >= 21 | month == 7 & date <= 22){ System.out.println("巨蟹座"); }else if(month == 7 & date >= 23 | month == 8 & date <= 22){ System.out.println("狮子座"); }else if(month == 8 & date >= 23 | month == 9 & date <= 22){ System.out.println("处女座"); }else if(month == 9 & date >= 23 | month == 10 & date <= 22){ System.out.println("天枰座"); }else if(month == 10 & date >= 23 | month == 11 & date <= 21){ System.out.println("天蝎座"); }else if(month == 11 & date >= 22 | month == 12 & date <= 21){ System.out.println("射手座"); }else if(month == 12 & date >= 22 | month == 1 & date <= 19){ System.out.println("魔羯座"); }else { System.out.println("输入日期不正确"); } } }
4.编写一个程序,根据员工的工龄来计算年终奖金。奖金计算规则如下: 工龄小于等于5年,奖金为工资的5% 工龄大于5年且小于等于10年,奖金为工资的10% 工龄大于10年,奖金为工资的15% (工资和工龄输入)
package com.kfm.java; import java.util.Scanner; /** * @author wang */ public class Doem4 { public static void main(String[] args) { /* 编写一个程序,根据员工的工龄来计算年终奖金。奖金计算规则如下: 工龄小于等于5年,奖金为工资的5% 工龄大于5年且小于等于10年,奖金为工资的10% 工龄大于10年,奖金为工资的15% (工资和工龄输入) */ Scanner input = new Scanner(System.in); System.out.println("请输入工资数额:"); double wages = input.nextDouble(); System.out.println("请输入工龄:"); double seniority = input.nextDouble(); double num; if (seniority <= 5){ num = wages * 0.05; System.out.printf("年终奖金为:%f\n",num); }else if (seniority > 5 & seniority <= 10){ num = wages * 0.1; System.out.printf("年终奖为:%f\n",num); }else if (seniority > 10){ num = wages * 0.15; System.out.printf("年终奖为:%f\n",num); } } }
三.思考
1.思考 if 和 switch 各有什么特点,什么情况下用 if 更好?什么情况下 switch 更佳?两者如何选择
答:一般来说,如果需要根据不同的条件执行不同的代码块,可以使用if语句;如果需要根据不同的变量值执行不同的代码块,可以使用switch语句。