概述
如果我们想某些代码是在满足条件的情况下, 才能被执行, 此时就需要用到选择结构了, 选择结构也叫分支结构, 主要分为以下两种:
- if语句
- switch.case语句
分类
if语句一般用于范围的判断, 例如: 如果当前时间是0~8点, 小黑就和你说: 早上好, 如果当前时间是9 ~12点, 小黑就和你说: 中午好. 根据应用场景的不同(即: 分支个数不同), if语句的格式主要分为以下三种:
if语句(也叫: 单分支)
if.else语句(也叫: 双分支)
if.else if语句(也叫: 多分支)
单分支
单分支结构一般用来判断一种情况, 格式如下:
格式
if(关系表达式) {
//语句体;
}
执行流程
先执行关系表达式, 看其结果是true还是false.
如果是true, 则执行大括号中的语句体.
如果是false, 则大括号中的语句体不执行.
图解
需求
定义变量time表示时间, 如果它的范围是在[0,8]之间, 就打印早上好, 否则不操作.
解释: [0, 8], 意思是说 0~8之间, 包含0, 也包含8, 这种写法属于"前闭后闭".
[0, 8), 意思是: 0~8之间, 包含0, 不包含8, 这种写法属于"前闭后开", 也叫: 包左不包右.
参考代码
public class IfDemo01 {
public static void main(String[] args) {
int time = 5;
if(time >= 0 && time <= 8) {
System.out.println("早上好");
}
}
}
双分支
双分支结构指的是if. else语句, 一般用来判断两种情况, 格式如下:
格式
if(关系表达式) { //if的意思: 如果
//语句体1;
} else { //否则...
//语句体2;
}
执行流程
先执行关系表达式, 看其结果是true还是false.
如果是true, 则执行语句体1.
如果是false, 则执行语句体2.
案例一: if格式二入门
需求
定义变量time表示时间, 如果它的范围是在0~8之间, 就打印早上好, 否则就打印中午好.
参考代码
public class IfDemo02 {
public static void main(String[] args) {
int time = 5;
if(time >= 0 && time <= 8) {
System.out.println("早上好");
} else {
System.out.println("中午好");
}
}
}
案例二: 判断奇偶数
需求
提示用户键盘录入一个数据并接收.
判断该数据是奇数还是偶数, 并将结果打印到控制台上.
参考代码
public class IfDemo03 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请录入一个整数: ");
int num = sc.nextInt();
if (num % 2 == 0) {
System.out.println(num + "是偶数");
} else {
System.out.println(num + "是奇数");
}
}
}
记忆
if语句控制的语句体如果只有一行代码, 则该大括号可以省略不写.
- :
- if(5 > 3)
- System.out.println("夯哥最纯洁!");
if语句控制的语句体如果只有一行代码, 则该大括号可以省略不写, 定义变量的语法除外.
- :
- if(5 > 3)
- int a = 10; //这样写会报错, jvm会识别这样代码为两行: int a; a = 10;
- :
- if(5 > 3) {
- int a;
- = 10; //这样写肯定会报错.
你省略if后边的大括号时, 有个问题一定要注意, 不要乱写分号.
- :
- > 3) ; //这里如果写分号了, 就意味着if语句结束了.
- System.out.println("本意: 这行代码只有条件成立才会被执行");
多分支
多分支结构指的是if. else if语句, 一般用来判断多种情况, 格式如下:
格式
if(关系表达式1) {
//语句体1;
} else if(关系表达式2){
//语句体2;
} else if(关系表达式3){ //这里可以根据需求, 有多个else if语句
//语句体3;
} else {
//语句体n;
}
执行流程
先执行关系表达式1, 看其结果是true还是false.
如果是true, 则执行语句体1, 整个if语句结束.
如果是false, 则判断关系表达式2, 看其结果是true还是false.
如果是true, 则执行语句体2, 整个if语句结束.
如果是false, 则判断关系表达式3, ...以此类推.
如果所有的关系表达式都不成立, 则执行else语句的语句体n, 整个if语句结束.
案例二: 打印星期
需求
提示用户录入[1, 7]之间的数字, 并接收.
根据用户录入的数字, 打印对应的星期, 格式如下:
-
- 用户录入1, 打印"星期一"
- 用户录入2, 打印"星期二"
- ...以此类推
- 用户录入非法数字, 打印"没有这样的日期"
参考代码
import java.util.Scanner;
public class IfDemo04 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请录入一个1 - 7之间的整数: ");
int week = sc.nextInt();
if (week == 1) {
} else if(week == 2) {
System.out.println("星期二");
} else if(week == 3) {
System.out.println("星期三");
} else if(week == 4) {
System.out.println("星期四");
} else if(week == 5) {
System.out.println("星期五");
} else if(week == 6) {
System.out.println("星期六");
} else if(week == 7) {
System.out.println("星期日");
} else {
System.out.println("没有这样的日期, 你是从火星来的吧!");
}
}
}
案例三: 发放奖励
需求
小明快要期末考试了,小明爸爸对他说,会根据他的考试成绩,送他不同的礼物.
假如你可以控制小明的得分,请用程序实现小明到底该获得什么样的礼物,并在控制台输出。
礼物标准如下:
-
- 95~100 山地自行车一辆
- 90~94 游乐场玩一次
- 80~89 变形金刚玩具一个
- 80以下 胖揍一顿
参考代码
import java.util.Scanner;
public class IfDemo05 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请录入小明的考试成绩: ");
int score = sc.nextInt();
if (score >= 95 && score <= 100) {
System.out.println("奖励小明: 山地自行车一辆");
} else if(score >= 90 && score < 95) {
System.out.println("奖励小明: 游乐场玩儿一次");
} else if(score >= 80 && score < 90) {
System.out.println("奖励小明: 变形金刚玩具一个");
} else if(score >= 0 && score < 80){
System.out.println("奖励小明: 男女双混组合拳 + 扫帚棒法");
} else {
System.out.println("考试成绩录入有误.");
}
}
}
例四: 获取最大值
需求
提示用户录入3个整数, 并接收.
通过if语句获取这三个整数的最大值.
将结果打印到控制台上.
参考代码
import java.util.Scanner;
public class IfDemo06 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请录入第一个整数: ");
int a = sc.nextInt();
System.out.println("请录入第二个整数: ");
int b = sc.nextInt();
System.out.println("请录入第三个整数: ");
int c = sc.nextInt();
//方式一: if嵌套实现.
int max = a;
int max2 = a;
if (a > b) {
if (a > c) {
max = a;
} else {
max = c;
}
} else {
if(b > c) {
max = b;
} else {
max = c;
}
}
System.out.println("最大值: " + max);
//方式二: if. else.if语句实现
if (a > b && a > c) {
max2 = a;
} else if(b > a && b > c) {
max2 = b;
} else {
max2 = c;
}
System.out.println("最大值: " + max2);
}
}