分支结构(if…else、switch-case)
1. if…else结构
if
语句有三种格式
-
if (条件表达式) { 执行代码块; // 语句块 }
-
if (条件语句) { 执行代码块1; } else{ 执行代码块2; }
-
if (条件表达式1) { 执行代码块1; } else if (条件表达式2) { 执行代码块2; } .... else { 执行代码块n; }
使用说明:
-
条件表达式必须是布尔表达式(关系表达式或逻辑表达式)、布尔变量
-
语句块只有一条执行语句时,一对{}可以省略,但建议保留
-
if-else语句结构,根据需要可以嵌套使用
-
当if-else结构是“多选一”时,最后的else是可选的,根据需要可以省略
-
当多个条件是“互斥”关系时,条件判断语句及执行语句间顺序无所谓
-
当多个条件是“包含”关系时,“小上大下 / 子上父下”
例题:
- 成绩为100分时,奖励一辆BMW;
成绩为(80,99]时,奖励一台iphone xs max;
当成绩为[60,80]时,奖励一个 iPad;
其它时,什么奖励也没有。
请从键盘输入成绩,并加以判断
代码示例:
// if-else 语句练习
import java.util.Scanner; // 导入Scanner类
class Exercise {
public static void main(String[] args) {
System.out.println("请输入成绩");
Scanner input = new Scanner(System.in); //System.in表示标准化输出,也就是键盘输出
int num = input.nextInt(); // 接收键盘输入数据
if (num == 100) {
System.out.println("奖励一辆BMW");
}
else if (num > 80 && num < 99) {
System.out.println("奖励一台iphone xs");
}
else if (num > 60 && num < 80) {
System.out.println("奖励一个 iPad");
}
else {
System.out.println("没有奖励");
}
}
}
- 假设你想开发一个玩彩票的游戏,程序随机地产生一个两位数的彩票,提示用户输入一个两位数,然后按照下面的规则判定用户是否能赢。
1)如果用户输入的数匹配彩票的实际顺序,奖金10 000美元。
2)如果用户输入的所有数字匹配彩票的所有数字,但顺序不一致,奖金 3 000美元。
3)如果用户输入的一个数字仅满足顺序情况下匹配彩票的一个数字,奖金1 000美元。
4)如果用户输入的一个数字仅满足非顺序情况下匹配彩票的一个数字,奖金500美元。
5)如果用户输入的数字没有匹配任何一个数字,则彩票作废。
代码示例:
import java.util.Scanner; // 作用:用来构建Scanner对象
/*
import的作用:
1. 加载已定义好的类或包
2. 导入支持类(可以是JDK基础类或者自己编写的类),可以供本类调用方法和属性。
*/
// 彩票(lottery)游戏
class Lottery {
public static void main(String[] args) {
// Scanner scan = new Scanner(System.in); // Scanner实例化 / System.in表示标准化输出,也就是键盘输出
int value = (int)(Math.random() * 90 + 10); // 从[10 , 99]随机取值
System.out.println("随机数:" + value);
System.out.println("请输入一个二位数");
Scanner input = new Scanner(System.in); //System.in表示标准化输出,也就是键盘输出
int num = input.nextInt(); // // 接收键盘输入数据
int numGe = num/10 , numShi = num%10;
int valueGe = value/10 , valueShi = value%10;
if(num == value) {
System.out.println("奖金10000美元");
}
else if(numGe == valueShi && numShi == valueGe) {
System.out.println("奖金3000美元");
}
else if(numGe == valueGe || numShi == valueShi) {
System.out.println("奖金1000美元");
}
else if(numGe == valueShi || numShi == valueGe) {
System.out.println("奖金500美元");
}
else {
System.out.println("彩票作废");
}
}
}
- 大家都知道,男大当婚,女大当嫁。那么女方家长要嫁女儿,当然要提出一定的条件:高:180cm以上;富:财富1千万以上;帅:是。
如果这三个条件同时满足,则:“我一定要嫁给他!!!”
如果三个条件有为真的情况,则:“嫁吧,比上不足,比下有余。”
如果三个条件都不满足,则:“不嫁!”
代码示例:
import java.util.Scanner; // 构建Scanner对象
class Marriage {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("身高:(cm)");
int stature = scan.nextInt();
System.out.println("财富:(千万)");
double wealth = scan.nextDouble();
System.out.println("帅否:(true/false)");
boolean isHandsome = scan.nextBoolean();
if(stature > 180 && wealth > 1 && isHandsome) {
System.out.println("我一定要嫁给他!!!");
}
else if(stature > 180 || wealth > 1 || isHandsome) {
System.out.println("嫁吧,比上不足,比下有余。");
}
else {
System.out.println("不嫁!");
}
}
}
知识点:从键盘获取不同类型的标量:需要使用
Scanner
类
- ① 导包:
import java.util.Scanner;
- ② Scanner 的实例化:
Scanner scan = new Scanner(System.in);
- ③ 调用 Scanner 类的相关方法(next() / nextXxx()),来获取指定的变量
2. switch-case结构
switch(表达式) {
case 值1:
语句块1;
break;
case 值2:
语句块2;
break;
…
case 值n:
语句块n;
break;
default:
语句块n+1;
break;
}
注意:
switch
(表达式)中表达式的值必须是下述几种类型之一:byte,short,char,int,枚举 (jdk 5.0),String (jdk 7.0);case
子句中的值必须是常量,不能是变量名或范围;
同一个switch语句,所有case子句中的常量值互不相同;break
(停止)语句用来在执行完一个case分支后使程序跳出switch语句块;如果没有break,程序会顺序执行到switch结尾default
子句是可任选的。同时,位置也是灵活的。当没有匹配的case时,执行default
例题:
1.使用 switch 把小写类型的 char型转为大写。只转换 a, b, c, d, e. 其它的输出 “other”。
提示:String word = scan.next(); char c = word.charAt(0); switch©{}
代码示例:
import java.util.Scanner;
class Capital {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("请输入a,b,c,d,e:");
String word = scan.next();
char c = word.charAt(0);
switch(c) {
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;
}
}
}
2.对学生成绩大于60分的,输出“合格”。低于60分的,输出“不合格”。
代码示例:
import java.util.Scanner; // 导包,构建Scanner对象
class Grade01 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in); // Scanner 实例化
System .out.println("请输入成绩:");
int num = scan.nextInt(); // 获取键盘输入数据
int grade = num/60;
// 以下为 switch-case 语句
switch(grade) {
case 1:
System.out.println("合格");
break;
case 0:
System.out.println("不合格");
break;
}
}
}
3.根据用于指定月份,打印该月份所属的季节。
3,4,5 春季 6,7,8 夏季 9,10,11 秋季 12, 1, 2 冬季
代码示例:
import java.util.Scanner;
class Senson {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("请输入月份:");
int num = scan.nextInt();
switch(num) {
case 3:
case 4:
case 5:
System.out.print("春季");
break;
case 6:
case 7:
case 8:
System.out.print("夏季");
break;
case 9:
case 10:
case 11:
System.out.print("秋季");
break;
case 12:
case 1:
case 2:
System.out.print("冬季");
break;
}
}
}
- 编写程序:从键盘上输入2019年的“month”和“day”,要求通过程序
输出输入的日期为2019年的第几天
代码示例:
import java.util.Scanner;
class DateText {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("请输入2019年月份:");
int month = scan.nextInt();
System.out.println("请输入2019年天数:");
int day = scan.nextInt();
// 定义一个变量保存天数
int SumDays = 0;
switch(month) {
case 12:
SumDays += 30;
case 11:
SumDays += 31;
case 10:
SumDays += 30;
case 9:
SumDays += 31;
case 8:
SumDays += 31;
case 7:
SumDays += 30;
case 6:
SumDays += 31;
case 5:
SumDays += 30;
case 4:
SumDays += 31;
case 3:
SumDays += 28;
case 2:
SumDays += 31;
case 1:
SumDays += day;
break;
}
System.out.println((month + "月" + day) + "为2019年的第 " + SumDays + " 天");
}
}
总结:
- 对一个变量进行条件判断时,如果既可以使用
if
语句,又可以使用switch
语句,应优先选择switch
语句。(switch
语句效率高于if
语句) if
语句的使用范围更广。因此,使用switch-case
的,都可以使用if-else
;但使用if-else
的,不一定可以使用switch-case