专属目录
Java 分支结构 if…else
引言
前面我们说了Java的键盘录入,大家可以随心所欲的输入自己想输入的想法、语句、数字
等等,不知道有没有细心的小伙们发现,我在附带的代码中编写着一句,if(xxx){},那这到底是什么呢,今天我们就来好好说道说道!
流程控制
在说分支结构
前,首先我们先来说下 流程控制
。
定义
流程
什么是流程
呢?
在一个程序中
,有很多的代码,这些代码的执行顺序
,就是流程。
流程控制
用于控制代码流程的方式
,就是流程控制
分类
Java 中流程控制结构可分为 顺序结构
、分支结构
和循环结构
这三类。下面简单介绍下这三类。
-
顺序结构
顺序结构
就是代码从上到下,从左到右依次执行。 -
分支结构
分支结构
是当到达某个状态时,可能会有多种情况,每种情况都需要提前准备好,所以多条路的路口就是一个分支。代码写得多,程序运行的少。
-
循环结构
循环结构
是某段代码相同或者相似,可以使用相同的逻辑。使用一定的格式,来完成相同代码的反复执行。代码写的少,程序运行次数多。
顺序结构
,我们就不细说了,你的代码是如何写的,程序就会怎么走,从上到下,从左到右按顺序执行。虽然它也能解决计算、输出等问题,但不能做判断再选择。走指定的分支,所以对于要先做判断再选择的问题就要使用分支结构!
今天我们来说下第二种 分支结构
,如何让程序走指定的分支!
分支结构
分支结构上文刚也简单介绍了下,到达某个状态时,可能会有多种情况,每种情况都需要提前准备好,所以多条路的路口就是一个分支。它的执行是依据一定的条件选择执行路径,而不是严格按照语句出现的物理顺序。一般适合于带有逻辑或关系比较等条件判断的计算。
学习分支结构
不要被分支嵌套
所迷惑
,大家可以先画流程图
,只要正确绘制出流程图
,弄清各分支所要执行的功能
,嵌套结构也就不难
了。嵌套只不过是分支中又包括分支语句而已,不是新知识,只要对双分支的理解清楚,分支嵌套是不难的。下面我介绍几种基本的分支结构。
分类
分支结构主要的实现格式分为 if 语句
和 switch 语句
-
if语句
if
是如果
的意思,满足了这种条件,才能执行相应的代码,实现不同的逻辑语句格式
主要包含if
、if...else
、if...else if...else if....else
这三种格式 -
switch语句
根据某个变量的值,判断符合哪种执行条件
语句格式只有
switch case
一种格式
拆分来说的话,主要分为 单一分支体
、 双分支体
、嵌套分支语句
、 switch开关语句
这几种基本的分支结构。
今天我们主要来说 if 语句
。
if 的第一种格式 (单一分支体) —— if 语句
语句
if 语句的语句格式
如下
if(布尔表达式){
语句体;
//如果布尔表达式为true将执行的语句
}
语句说明
-
if语句
后面跟着的小括号,里面必须是 boolean类型 的值
;if语句后面的小括号中,只要是计算结果为boolean类型,就合法 -
if 大括号里面的语句体,可以是
任意操作
执行流程
-
计算布尔表达式的值,要么为true、要么为false
-
如果计算结果为true,执行语句体
-
如果计算结果为false,就不执行语句体
示例
键盘录入一个年龄,使用 if 语句判断输入的年龄是否大于 18
,若小于结果为false
直接执行 "谢谢光临,若大于则为true
,进入if 语句体,执行打印语句。
import java.util.Scanner;
public class IfYuJu {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("请录入您的年龄:");
int age = sc.nextInt();//录入年龄
if (age > 18) {//判断是否大于18
//如果满足条件才运行这句话
System.out.println("您可以进入网吧");
}
//无论if的判断如何,都会执行的一句话
System.out.println("谢谢光临");
}
}
运行结果
请录入您的年龄: 26
您可以进入网吧
谢谢光临
看到结果可一目了然。接下来我们来说 if 的第二种语句格式
if 的第二种格式 (双分支体) —— if…else 语句
语句
if...else 语句的语句格式
如下
if(布尔表达式){
语句体1;
//如果布尔表达式的值为true
}else{
语句体2;
//如果布尔表达式的值为false
}
语句说明
-
是否有某种情况,可以
语句体1
和语句体2
都不执行?不可能,
else
就已经包含了if不满足的所有状态
-
是否有某种情况,可以让
语句体1
和语句体2
都执行?不可能,因为只要
语句体1
执行了,if语句就直接结束了 -
只能执行
其中的一句语句体
,并且一定会
执行其中一句
执行流程
-
计算条件表达式的值,要么是true、要么是false
-
如果条件表达式的值为true,执行语句体1
-
如果条件表达式的值为false,执行语句体2
示例
import java.util.Scanner;
public class IfElseYuJu {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("又到双十一了,该不该剁手呢?\n选择 ' 1 ' 将进入剁手时刻!");
int x = sc.nextInt();
if (x == 1) {
//如果满足条件才运行 语句体1
System.out.println("剁手准备");
} else {
//当不满足条件时都会运行 else 语句体2
System.out.println("回家睡着去吧");
}
}
}
运行结果
又到双十一了,该不该剁手呢?
选择 ' 1 ' 将进入剁手时刻!
2
回家睡着去吧
从结果可以看出,当输入的数字不为 1 时 ,结果为 false
,就会直接进入 else 语句中
,执行语句体2
下面我们来讲 if 的最后一个语句格式。
if 的第三种格式 (嵌套分支语句) —— if…else if…else 语句
语句
if...else if...else 语句的语句格式
如下
if(布尔表达式 1){
语句体1;
//如果布尔表达式 1的值为true执行代码
}else if(布尔表达式 2){
语句体2;
//如果布尔表达式 2的值为true执行代码
}else if(布尔表达式 3){
语句体3;
//如果布尔表达式 3的值为true执行代码
...
}else if(布尔表达式 n){
语句体n;
//如果布尔表达式 n的值为true执行代码
}else {
语句体n+1;
//如果以上布尔表达式都不为true执行代码
}
语句说明
-
如果
条件表达式2
计算结果为true
,执行语句体2
( 其实这个条件的完整版本:条件表达式1
不满足
,并且条件表达式2
满足
) -
最后的else语句
可以有
也可以没有
,如果有,就一定有执行的内容,如果没有就可能什么都执行不了 -
语句体1 ~ 语句体n+1
是否有可能执行两句
或者两句以上
?不可能,只要其中一条语句执行了,if语句就结束了
-
语句体1 ~ 语句体n+1
是否有可能一句都不执行
?有两种情况,
如果没有else语句
,就可能一个语句体都不执行
;如果有else语句
,就一定会执行其中的一句
。
执行流程
-
计算条件表达式1,如果为 true,就执行 语句体1;
-
如果 条件表达式1 为 false,计算条件 表达式2,如果为 true,就执行 语句体2
-
如果 条件表达式2 位 false,就计算条件表达式3…
-
如果
条件表达式1
~
条件表达式n
全都为 false,那么就执行语句体 n+1
使用应注意
-
if 语句至多有 1 个 else 语句
,else 语句在所有的 else if 语句之后
。 -
if 语句可以有若干个 else if 语句,它们必须在 else 语句之前。
-
一旦其中一个 else if 语句检测为 true,其他的 else if 以及 else 语句都将跳过执行。
示例
one
此实例使用if…else if…else 语句,判断键盘输入的数字,是否为 1 、2 、3 ,若输入的数为1,则输出打印语句体1 ,结束判断语句,输入为2 ,则输出打印语句体2 ,若输入的数为3, 则输出打印语句体3,若输入的数不为1、2、3 则都会进入else 执行else 内语句体。
import java.util.Scanner;
public class IfElseYuJu {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("又到双十一了,该不该剁手呢?\n请输入数字挑选你的命运!");
int x = sc.nextInt();
if (x == 1) {
System.out.println("剁手准备");
} else if (x == 2) {
System.out.println("忍会儿,攒点钱");
} else if (x == 3) {
System.out.println("昨天已经买过了,等到春节再买");
} else {
System.out.println("回家睡着去吧");
}
}
}
运行结果
又到双十一了,该不该剁手呢?
请输入数字挑选你的命运!
3
昨天已经买过了,等到春节再买
这时候可以看到,当我输入的值为3时,程序执行了 语句体3 。打印了 “昨天已经买过了,等到春节再买” 这句话!
two
public class IfElseIfElseYuJu {
public static void main(String[] args) {
int i;
int j = 10;
if (j > 100) {
i = 10;
} else if (j > 50) {
i = 5;
} else if (j > 10) {
i = 1;
} else if (j <= 10) {
i = 0;
}
//可能尚未初始化变量i,没有else语句,所以可能一个语句体都执行不了
System.out.println(i);
}
}
此时编译没法通过 报错显示可能尚未初始化变量i
所以这样子写是不允许的!应首先给变量 i 赋一个初始值!
int i = 0;
最后,if 语句还有一种使用方法,使用率也是较为繁多的!
它也是嵌套性的,具体是如何使用的,我们接着往下看!
嵌套的 if…else 语句
特别提示:它不属于 if 的语句格式,因为 使用嵌套的 if…else 语句是合法的
,它只是在if…else 语句中嵌套了一个 if…else 语句
也就是说你可以在另一个 if 或者 else if 语句中使用 if 或者 else if 语句
。
语句
嵌套的 if…else 语句
格式如下:
if(布尔表达式 1){
语句体1;
如果布尔表达式 1的值为true执行代码
if(布尔表达式 2){
语句体2;
如果布尔表达式 2的值为true执行代码
}
}
你可以像 if 语句一样嵌套 else if…else。
实例
public class Test {
public static void main(String args[]){
int x = 30;
int y = 10;
if (x == 30) {
System.out.println("X = 30");
if (y == 10) {
System.out.println("X = 30 and Y = 10");
}
}
}
}
运行结果
X = 30
X = 30 and Y = 10
可以看出 布尔表达式 1 和 2
执行的结果都为 true
,所以语句体1 和 语句体2 都执行了
,你可以根据个人需求嵌套多个if…else 这都是完全没有问题的!
特别注意
看到这分支结构 if 语句
就分解到这里了。 但是还是有一点重要的注意
要给大家说,以免小伙伴们入坑!
-
if 后面跟着的小括号里面,必须是 boolean 的值
-
if 后面跟着的小括号里面,只要计算结果为 boolean类型,就算合法
-
在小括号后面不要加分号,一般来说,有左大括号,就没有分号,有分号,就没有左大括号
-
所有的语句体都可以是任意语句。如果语句体只有一句,那么大括号可以省略。但是建议所有情况都加上大括号,不要省略
总结
下回我们来讲分支结构的另一种格式 —— switch case 语句
,想让程序就那个分支走哪就走哪,随心所动,随心所写,由你而掌控!那你还不赶快先去试试 if 语句,这就对了嘛,我们下回见分晓!别着急,还有更多的秘密等着你来探索!
分享嗨起来,美德传起来,点个星标从此探索之路不迷茫!
微信扫描二维码,关注我的原创日更公众号,可以查看更多程序的秘密!