Java分支结构详解
- 前言
- 一、if 语句
- 基本语法
- 表示一
- 表示二
- 表示三
- 代码示例
- 判定一个数字是奇数还是偶数
- 判定一个数字是正数还是负数
- 判定某一年份是否是闰年
- 注意要点
- 悬垂 else 问题
- 代码风格问题
- 分号问题
- 二、switch 语句
- 基本语法
- 代码示例
- 根据 day 的值输出星期
- 注意事项
- break 不要遗漏
- switch 中的值只能是 整数|枚举|字符|字符串
- switch 不能表达复杂的条件
- switch嵌套
前言
推荐一个网站给想要了解或者学习人工智能知识的读者,这个网站里内容讲解通俗易懂且风趣幽默,对我帮助很大。我想与大家分享这个宝藏网站,请点击下方链接查看。
https://www.captainbed.cn/f1
Java中的分支结构用于根据条件执行不同的代码块,包括if-else
语句、switch
语句等,实现程序流程的控制。
一、if 语句
在Java中,if
语句是一个条件控制语句,用于根据条件的真假决定是否执行特定的代码块。
在if
语句中,条件是一个布尔表达式,可以是一个比较表达式(例如==
、!=
、>
、<
等),也可以是一个逻辑表达式(例如&&
、||
、!
等)。
基本语法
表示一
if(布尔表达式){//条件满足时执行代码
}
表示二
if(布尔表达式){//条件满足时执行代码
}else{//条件不满足时执行代码
}
表示三
if(布尔表达式){//条件满足时执行代码
}else if(布尔表达式){//条件满足时执行代码
}else{//条件都不满足时执行代码
}
代码示例
判定一个数字是奇数还是偶数
public static void main(String[] args) {int num = 10;if (num % 2 == 0) {System.out.println("num 是偶数");} else {System.out.println("num 是奇数");}
}
以上代码是一个Java程序的主方法,程序开始执行的入口。在主方法中,定义了一个整型变量num
,并初始化为10。
接下来使用if-else
语句判断num
是否是偶数。条件表达式num % 2 == 0
用于判断num
是否可以被2整除,如果可以,则说明num
是偶数,执行if语句中的代码块,打印出"num
是偶数"。
如果条件表达式的结果为false
,即num
不能被2整除,说明num
是奇数,执行else
语句中的代码块,打印出"num
是奇数"。
因为num
的值为10,可以被2整除,所以输出结果为"num
是偶数"。
判定一个数字是正数还是负数
public static void main(String[] args) {int num = 10;if (num > 0) {System.out.println("num 是正数");} else if (num < 0) {System.out.println("num 是负数");} else {System.out.println("num 是 0");}
}
以上代码是一个Java程序的主方法,程序开始执行的入口。在主方法中,定义了一个整型变量num
,并初始化为10。
接下来使用if-else if-else
语句对num
的值进行判断。首先判断num
是否大于0,如果条件表达式num > 0
的结果为true,则执行if语句中的代码块,打印出"num
是正数"。
如果条件表达式num > 0
的结果为false
,则继续判断num
是否小于0。如果条件表达式num < 0
的结果为true
,则执行else if
语句中的代码块,打印出"num
是负数"。
如果以上两个条件表达式的结果都为false
,说明num
等于0,执行else
语句中的代码块,打印出"num
是 0"。
因为num的值为10,大于0,所以输出结果为"num
是正数"。
判定某一年份是否是闰年
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("不是闰年");}}
}
以上代码是一个Java程序的主方法,程序开始执行的入口。在主方法中,定义了一个整型变量year
,并初始化为2000。
接下来使用嵌套的if-else
语句对year
进行判断,判断year
是否是闰年。
首先判断year
是否能被100整除,即条件表达式year % 100 == 0
的结果。如果条件表达式的结果为true
,则执行if
语句中的代码块,进一步判断是否是世纪闰年。
在if
语句中,判断year
是否能被400整除,即条件表达式year % 400 == 0
的结果。如果条件表达式的结果为true
,则输出"是闰年"。如果条件表达式的结果为false
,则输出"不是闰年"。
如果条件表达式year % 100 == 0
的结果为false
,则执行else
语句中的代码块,判断是否是普通闰年。
在else
语句中,判断year
是否能被4整除,即条件表达式year % 4 == 0
的结果。如果条件表达式的结果为true
,则输出"是闰年"。如果条件表达式的结果为false
,则输出"不是闰年"。
因为year
的值为2000,满足条件year % 100 == 0
,进一步满足条件year % 400 == 0
,所以输出结果为"是闰年"。
注意要点
悬垂 else 问题
public static void main(String[] args) {int x = 10;int y = 10;if (x == 10)if (y == 10)System.out.println("aaa");elseSystem.out.println("bbb");
}
if
/ else
语句中可以不加 大括号 . 但是也可以写语句(只能写一条语句).
此时 else
是和最接近的 if
匹配.
但是实际开发中我们 不建议 这么写. 最好加上大括号
代码风格问题
public static void main(String[] args) {// 风格1int x = 10;if (x == 10) {// 满足条件} else {// 不满足条件}
// 风格2int x = 10;if (x == 10){// 满足条件}else{// 不满足条件}
}
虽然两种方式都是合法的, 但是 Java 中更推荐使用风格1, {
放在 if
/ else
同一行.
分号问题
public static void main(String[] args) {int x = 20;if (x == 10); {System.out.println("hehe");}
}
此处多写了一个 分号, 导致分号成为了 if
语句的语句体, 而 { }
中的代码已经成为了和一个 if
无关的代码块.
二、switch 语句
基本语法
public static void main(String[] args) {switch(整数|枚举|字符|字符串){case 内容1 : {内容满足时执行语句;[break;]}case 内容2 : {内容满足时执行语句;[break;]}...default:{内容都不满足时执行语句;[break;]}}
}
代码示例
根据 day 的值输出星期
public static void main(String[] args) {int day = 1;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
语句来根据一个整型变量day
的值输出对应的星期几。Switch
语句中的每个case
对应了一个可能的day
值,当day
的值满足某个case
时,会执行该case
下的语句,并且使用break
语句跳出Switch
语句。如果day
的值不满足任何一个case
,那么会执行default
下的语句。在这段代码中,day
的值为1,所以输出为"星期一"。
根据 switch
中值的不同, 会执行对应的 case
语句.
遇到 break
就会结束该 case
语句.
如果 switch
中的值没有匹配的 case
, 就会执行 default
中的语句.
我们建议一个 switch
语句最好都要带上 default
.
注意事项
break 不要遗漏
否则会失去 “多分支选择” 的效果
public static void main(String[] args) {int day = 1;switch(day) {case 1:System.out.println("星期一");// break;case 2:System.out.println("星期二");break;}
}
我们发现, 不写 break
的时候, case
语句会依次向下执行, 从而失去了多分支的效果.
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;}
}
switch 不能表达复杂的条件
public static void main(String[] args) {// 例如: 如果 num 的值在 10 到 20 之间, 就打印 hehe
// 这样的代码使用 if 很容易表达, 但是使用 switch 就无法表示.if (num > 10 && num < 20) {System.out.println("hehe");}
}
switch嵌套
虽然可以运行,但是不美观,少用
public static void main(String[] args) {int x = 1;int y = 1;switch(x) {case 1:switch(y) {case 1:System.out.println("hehe");break;}break;case 2:System.out.println("haha");break;}
}