⭐ 作者:小胡_不糊涂
🌱 作者主页:小胡_不糊涂的个人主页
📀 收录专栏:浅谈Java
💖 持续更文,关注博主少走弯路,谢谢大家支持 💖
顺序和选择
- 1. 顺序结构
- 2. 分支结构
- 2.1 if 语句
- 2.2 switch 语句
1. 顺序结构
顺序结构比较简单,就是按照代码书写的顺序一行一行执行。
例如:
System.out.println("aaa");
System.out.println("bbb");
System.out.println("ccc");
这段代码的运行结果就是从上至下输出:
aaa
bbb
ccc
如果调整代码的书写顺序, 则执行顺序也发生变化:
System.out.println("aaa");
System.out.println("ccc");
System.out.println("bbb")
🍤 输出:
aaa
ccc
bbb
2. 分支结构
2.1 if 语句
语法格式1:
if(布尔表达式){
// 语句
}
如果布尔表达式结果为 true,执行 if 中的语句,否则不执行。
比如:小明,如果这次考试考到90分或以上,给你奖励一个鸡腿。
public static void main(String[] args) {
int score = 92;
if(score >= 90){
System.out.println("吃个大鸡腿!!!");
}
}
🍤 运行结果:
语法格式2:
if(布尔表达式){
// 语句1
}else{
// 语句2
}
如果布尔表达式结果为 true,则执行 if 中语句,否则执行 else 中语句。
比如:小明,如果这次考到90分以上,给你奖励一个大鸡腿,否则奖你一个大嘴巴子。
public static void main(String[] args) {
int score = 89;
if(score >= 90){
System.out.println("吃个大鸡腿!!!");
}else{
System.out.println("挨大嘴巴子!!!");
}
}
🍤 运行结果:
语法格式3:
if(布尔表达式1){
// 语句1
}else if(布尔表达式2){
// 语句2
}else{
// 语句3
}
表达式1成立,执行语句1,否则表达式2成立,执行语句2,否则执行语句3。
比如:我们定义一个分数区间来划分学生的成绩
分数在 [90, 100] 之间的,为优秀
分数在 [80, 90) 之前的,为良好
分数在 [70, 80) 之间的,为中等
分数在 [60, 70) 之间的,为及格
分数在 [ 0, 60) 之间的,为不及格
错误数据
代码实现:
public static void main(String[] args) {
int score=88;//学生成绩
//判断
if(score >= 90){
System.out.println("优秀");
}else if(score >= 80 && score < 90){
System.out.println("良好");
}else if(score >= 70 && score < 80){
System.out.println("中等");
}else if(score >= 60 && score < 70){
System.out.println("及格");
}else if(score >= 0 && score < 60){
System.out.println("不及格");
}else{
System.out.println("错误数据");
}
}
🍤 运行结果:
实例1:判断一个数字是奇数还是偶数
首先需要知道判断奇偶的规则。数学上,我们判断奇偶数是以该数是否可以整除 2 为根据的,一个数能够整除 2,即计算的余数为 0,当除以 2 后的余数为 0 时,就说明了该数为偶数,否则是奇数。
我们已经了解判断奇偶数的方法,尝试写出代码:
public static void main(String[] args) {
int num = 10;
if (num % 2 == 0) {
System.out.println("num 是偶数");
} else {
System.out.println("num 是奇数");
}
}
🍤 运行结果:
实例2:判断一个数字是正数,负数,还是零
大于 0 是正数,小于 0 是负数,所以这里只需要判断是大于、小于还是等于。
public static void main(String[] args) {
int num = 10;
if (num > 0) {
System.out.println("正数");
} else if (num < 0) {
System.out.println("负数");
} else {
System.out.println("0");
}
}
🍤 运行结果:
实例3:判断一个年份是否为闰年
普通闰年:公历年份是4的倍数,且不是100的倍数的,为闰年(如2004年、2020年等就是闰年)。
世纪闰年:公历年份是整百数的,必须是400的倍数才是闰年(如1900年不是闰年,2000年是闰年)。
public static void main(String[] args) {
int year = 2000;
if (year % 100 == 0) {
// 判定世纪闰年
if (year % 400 == 0) {
System.out.println("是闰年");
} else {
System.out.println("不是闰年");
}
} else {
// 普通闰年
if (year % 4 == 0) {
System.out.println("是闰年");
} else {
System.out.println("不是闰年");
}
}
}
🍤 运行结果:
注:
- 分号问题
这段代码的结果会是什么?
public static void main(String[] args) {
int x = 20;
if (x == 10);
{
System.out.println("hehe");
}
}
🍤 运行结果:
有人可能会好奇,为什么这里 x 明明是20,不等于10啊,怎么还会打印 hehe 。
仔细观察就会发现:if 语句后跟有一个分号,这里导致分号成为了 if 语句的语句体,而 { } 中的代码已经成为了和一个 if 无关的代码块,所以会打印出来。
🍩分号代表语句的结束
- 悬垂 else 问题
public static void main(String[] args) {
int x = 10;
int y = 10;
if (x == 20)
if (y == 10)
System.out.println("aaa");
else
System.out.println("bbb");
}
🍤 运行结果:
为什么什么都没有打印?
首先if / else 语句中可以不加大括号,当不加{}时,他只控制下面的一条语句,要控制多行,必须加上大括号。
其次就是 else 是和最接近的 if 匹配,并不是和谁对齐就与它匹配。
2.2 switch 语句
基本语法:
switch(表达式){
case 常量值1:{
语句1;
[break;]
}
case 常量值2:{
语句2;
[break;]
}
...
default:{
...;//内容都不满足时执行语句
[break;]
}
}
执行流程:
- 先计算表达式的值
- 和case依次比较,一旦有响应的匹配就执行该项下的语句,直到遇到break时结束
- 当表达式的值没有与所列项匹配时,执行default
实例:根据 day 的值输出星期
public static void main(String[] args) {
int day = 6;
switch(day) {
case 1:
System.out.println("星期一");
break;//遇到break停止,跳出switch语句
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:
case 7:
System.out.println("周末");
break;
default:
System.out.println("输入有误");
break;
}
}
🍤 运行结果:
注:
- 多个case后的常量值不可以重复
- switch的括号内只能是以下类型的表达式:
基本类型:byte、char、short、int,不能是long、float、double、boolean类型;
引用类型:String常量串、枚举类型 - break 不要遗漏,否则会失去 “多分支选择” 的效果
- switch 不能表达复杂的条件
- switch 虽然支持嵌套,但是很丑,一般不推荐,毕竟这是一个看脸的世界~
使用错误类型
public static void main(String[] args) {
double num=1.0;
switch(num) {
case 1.0:
System.out.println("hehe");
break;
case 2.0:
System.out.println("haha");
break;
}
}
🍤 编译出错:
遗漏break
public static void main(String[] args) {
int day = 1;
switch(day) {
case 1:
System.out.println("星期一");
// break;
case 2:
System.out.println("星期二");
break;
}
}
🍤 运行结果:
不能表达复杂条件
// 例如: 如果 num 的值在 10 到 20 之间, 就打印 hehe
// 这样的代码使用 if 很容易表达, 但是使用 switch 无法表示
if (num > 10 && num < 20) {
System.out.println("hehe");
}