if选择结构
1.为什么需要if选择结构
在生活中我们基础需要做判断,然后才能决定是否做某一件事情。例如,如果妈妈今天过生日,你将送给妈妈一份礼物;如果地球上没有水,人类将濒临。
现在用java程序解决下面的问题。
问题:
如果张浩的java考试成绩大于98分,那么张浩就能获得一个MP4作为奖励。
分析:
需要判断条件,条件满足则输出,条件不满足则不输出。这个问题就需要先判断张浩的java成绩,他的java成绩大于98分时,才有奖励。对于这种 ‘’需要先判断条件,条件满足后执行‘’的程序,需要使用if结构来实现。s
2.什么是if选择结构
if选择结构是根据条件判断之后再做处理的一种语言结构。下面看一下最基本的if选择结构的语法。
语法:
if(条件){
代码块 //条件成立后要执行的代码,可以是一条语句,也可以是一组语句
}
下面看一看如下程序如何执行。
publice class Demo{
public static void main(String[] args){
//语句1;
//语句2;
if(条件){
//语句3;
}
//语句4;
}
}
main()是程序的入口,main()中执行的语句将逐条顺序地执行,所有的语句都执行完毕后程序结束。因此,程序开始执行后,首先执行语句1和语句2,然后对条件进行判断。如果条件成立,则运行语句3,然后跳出if结构块执行语句4;如果不成立,则语句3不执行,直接程序语句4。
经验:
当if关键字后的一对大括号里面只有一个语句时,可以省略大括号。但是完了避免有多个语句时遗忘大括号,以及保持程序整体的风格一致,建议不要省略if结构块的大括号。
2.如何使用if选择结构
1. 使用基本的if选择结构
使用基本的if选择结构解决,如果张浩的java考试成绩大于98分,那么张浩就能获得一个MP4作为奖励的问题,代码如示列1所示。
示列1:
import java.util.Scanner;
public class GetPrize {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
//提示输入成绩
System.out.println("输入张浩的成绩:");
//从控制台获取张浩的java成绩
int score = input.nextInt();
//判断是否大于98分
if (score > 98){
System.out.println("老师说:不错,奖励一个MP4!");
}
}
}
程序运行结果如下:
这里输出张浩成绩后,通过判断得知是否大于98分,如果大于98分,则会输出"老师说:不错,奖励一个MP4!"。否则,不会输出这一句话。通过这个简单的例子,可以体会到if选择结构先判断后执行的方式。
2. 使用复杂条件下的if选择结构
问题:
如果张浩的java成绩大于98分且音乐成绩大于80分,老师则奖励他;或者 java成绩等于100分,音乐成绩等于70分,老师也可以奖励他。
分析:
这个问题需要的判断条件比较多,因此需要将多个条件连接起来,java中可以使用逻辑运算符连接多个条件。
常用的逻辑运算符如下:
现在考虑一下怎么连接问题中的条件,首先抽取问题中的条件。
张浩java成绩 == 98 并且 张浩音乐成绩 > 80分
或者
张浩java成绩 == 100 并且 张浩音乐成绩 > 70分
提取出了条件,是否可以这样编写条件呢?
第一种写法:
scorel > 98 && score2 > 80 || score1 == 100 && score2 > 70
第二种写法:
(score1 > 98 && score2 > 80) || (scorel == 100 && score2 > 70)
其中,score1 表示张浩的java成绩,score2 表示张浩的音乐成绩。
显然是第二种写法更清晰描述了上述问题的条件。
经验:
当运算符比较多,无法确定运算符执行的顺序时,可以使用小括号控制。
上述问题的完整代码如示列2所示。
示列2:
public class GetPrize2 {
public static void main(String[] args) {
//张浩的java成绩
int score1 = 100;
//张浩的音乐成绩
int score2 = 72;
if ((score1 > 98 && score2 > 80)||(score1 == 100 && score2 > 70)){
System.out.println("老师说:不错,奖励一个MP4");
}
}
}
程序运行结果如下:
3.使用if-else选择结构
问题:
如果张浩的java成绩大于98分,那么老师奖励他一个MP4;否则老师惩罚他抄代码。
分析:
与上面的if选择结构不同的是,除了要实现条件成立执行的执行操作以外,还要实现条件不成立时执行的操作。
当然,这个问题可以使用两个if选择结构来实现,如示列3所示。
示列3:
publice class SimpleIf{
publice static void main(String[] args){
//张浩的java成绩
int score = 91;
if(score > 98){
System.out.println("老师说:不错,奖励一个MP4!")
}
if(score <= 98){
System.out.println("老师说:惩罚你抄代码!")
}
}
}
使用两个if选择结构看起来很繁琐,实际上有一个语法结构可以更好地解决这个问题,结束if-else选择结构,表示 "如果xx,就xx;否则,就xx"。这看起来很像小学时候的造句。使用java程序语言的过程,就是造句的过程,只是不是用汉语造句,而是用java语言造句。
if-else选择结构的语法如下。
if(条件){
//代码块1
}else{
//代码块2
}
使用if-else选择结构进行编程。改写代码3中的代码。
示列4:
public class SimpleIf2 {
public static void main(String[] args) {
//张浩的java成绩
int score = 90;
if (score > 98){
System.out.println("老师说:不错,奖励一个MP4!");
}else{
System.out.println("老师说:惩罚你抄代码!");
}
}
}
程序运行结果如下
小结:基本的if选择结构,只有一个if块;if-else选择结构,有if块和else块。
3.多重if选择结构循环
问题:
对学员的结业考试成绩进行测评。
分析:
这个问题是要将成绩分成几个区间进行判断
0-60 | 差 |
---|---|
60-80 | 中等 |
80-100 | 良好 |
分析完这个问题后,我们可以确定使用单个if选择结构无法完成。那么可以使用多个if选择结构来实现。但是条件写起来也很麻烦。java中还有一种if选择结构的形式:多重if选择结构。多重if选择结构在解决需要判断的条件是连续的区间时有很大的优势。
多重if选择结构不是多个基本if选择结构简单地排列在以前,它的语法具体如下。
语法:
if(条件 1){
//代码块 1
}else if (条件){
//代码块 2
}else{
//代码块 3
}
多重if选择结构到底是如何执行的呢?首先,程序判断条件1,如果成立,则执行代码块1,然后直接跳出这个多重循环if选择结构,执行它后面的代码。这种情况下,代码块2和代码块3都不会被执行。如果条件1不成立,则判断条件2。如果条件2成立,则执行代码块2,然后跳出这个多重循环,执行它后面的代码。这种情况下,代码块1和代码块3不会被执行。如果条件2也不成立,则代码块1和代码块2都不执行,直接执行代码块3。
注意:其中,else if 块最多有一个或没有,else块必须要放在else if 块之后。
既然知道了多重if选择的语法结构,那么应该如何使用多重if选择结构来解决这个问题呢?完整代码如示列5所示。
示列5:
public class ScoreAssess {
public static void main(String[] args) {
//考试成绩
int score = 70;
// 考试成绩大于或等于80的if判断
if (score >= 80) {
System.out.println("良好");
// 考试成绩大于或等于60的判断
} else if (score >= 60) {
System.out.println("中等");
// 考试成绩小于60
}else{
System.out.println("差");
}
}
}
程序运行结果如下:
if选择结构-示列5-效果图
观察这段代码,结合else if 块执行的顺序可以看出,else if块的顺序是连续的,而不是跳跃的。
问题:
小明想买车,买什么车决定于小明在银行有多少存款。
如果小明的存款超过500万,则买凯迪拉克;
否则,如果小明的存款超过100万,则买帕萨特;
否则,如果小明的存款超过50万,则买伊兰特;
否则,如果小明的存款超过10万,则买奥拓;
否则,小明买捷安特。
示列6:
public class BuyCar{
public static void main(String[] args){
//小明的存款,单位万元
int money = 50;
if(money >= 500){
System.out.println("太好了,我可以买辆凯迪拉克");
}else if(money >= 100){
System.out.println("不错,我可以买辆帕萨特");
}else if(money >= 50){
System.out.println("我可以买辆伊兰特");
}else if(money >= 10){
Systemo.out.println("至少我可以买辆奥拓");
}else{
Systemo.out.println("看来,我只能买一辆捷安特了");
}
}
}
注意:
如果多重if选择结构中的所有条件之间只是简单的互斥,不存在连续的问题,则条件没有顺序要求。例如,判断一个人的国籍是中国、美国、英国、法国、俄国或其他。
4.嵌套if选择结构
问题:
学校举行运动会,百米赛跑成绩在10秒以内的学生有资格进决赛,根据性别分为男子组,还是进入女子组。
分析:
首先,要判断是否能够进入决赛,在确定进入决赛的情况下,再判断是进入男子组,还是进入女子组,这就需要使用嵌套if选择结构来解决。
语法:
if(条件1){
if(条件2){
//代码块1
}else{
//代码块2
}else{
//代码块3
}
}
现在就使用嵌套if结构来解决这个问题。代码如示列7所示。
示列7:
import java.util.Scanner;
public class RunningMatch {
public static void main(String[] args) {
//获取输入信息的工具
Scanner input = new Scanner(System.in);
//提示用户输入成绩
System.out.println("请输入比赛成绩:");
//输入的成绩用double类型来存储
double score = input.nextInt();
//提示用户输入成绩
System.out.println("请输入性别:");
//输入的成绩用String类型来存储
String gender = input.next();
//如果成绩大于10或者等于10进入循环 否则输出淘汰
if (score <= 10) {
//如果gender性别 收到的信息是男 进入循环
if (gender.equals("男")) {
System.out.println("进入男子组决赛!");
//如果gender性别 收到的信息是女 进入循环
} else if (gender.equals("女")) {
System.out.println("进入女子组决赛!");
}
} else {
System.out.println("淘汰");
}
}
}
程序运行结果如图:
注意:
- 只有当满足了外层的if选择结构的条件时,才会判断内层if的条件
- else 总是与它前面最近的那个缺少 else 的 if 配对
if结构书法规范如下
- 为了使if选择结构更加清晰,应该把每一个if或者else包含的代码块用大括号括起来。
- 相配对的一对if和else应该左对齐。
- 内层的if结构相对于外层的if选择结构要有一定的缩进。
总结:
- 基本的if选择结构:可以处理单一或组合条件的情况。
- if-else 选择结构:可以处理简单的条件分支情况。
- 多重if选择结构:可以处理连续区间的条件分支情况。
- 嵌套if选择结构:可以处理复杂的条件分支情况。