3.3 嵌套条件语句
嵌套条件语句是指else语句又有if语句。if和else可以根据条件分两路执行,else里面又有if语句让我们可以创造超过两路的分支。格式如下:
if(条件1)
语句1;
else if(条件2)
语句2;
else
语句3;
(1)被控制的语句本身也是条件语句;
在else语句里面又出现if语句,构成3条或以上的分支。else之后紧接着if语句,这里有一种紧密的写法else if。
(2)如果走到条件2,说明这时候条件1不成立,也就是条件1的否定。
第(2)条是嵌套条件语句的核心,如果已经到了else语句里面,就说明前面的if语句的条件已经不成立了,那么就是条件1的否定。看下面的例子里的错误示范:
if(a > 10)
语句1;
else if(a > 5 && a <= 10)
语句2;
else
语句3;
有没有发现多余的代码是什么呢?
当a大于10的时候,执行语句1,这个很容易理解。
当a大于5并且小于等于10的时候,执行语句2。但这个时候,其实已经没有必要写a<=10这个条件了!这是必定成立的,因为能执行到语句2,肯定已经是a>10的否定了,也就是a<=10。a>5 && a<=10在这里就相当于a>5 && true,所以a<=10是没必要写的。
下面是一个评分程序,当分数是90到100分的时候,评级A;75到90的时候,评级B,其余的分数评为C:
public static void main(String[]args){
Scanner scanner=new Scanner(System.in);
int s=scanner.nextInt();
if(s >= 90 && s <= 100){
System.out.println("A");
}
else if(s >=75){
System.out.println("B");
}
else{
System.out.println("C");
}
}
注意写第二个条件的时候,不需要写s<90 ,因为s必定小于90,否则就打印A了。
嵌套条件语句还需要注意下面代码的情况:
if(a > 10)
语句1;
else if(a > 15)
语句2;
else if(a > 5)
语句3;
这样的语句不会有语法错误,但有逻辑错误。思考一下,语句2在什么情况下才会被执行到?应该怎么修改?
练习题
-
选择题,以下题目的变量a都是int类型1.当输出”aaa”的时候,a的值的范围是: (2分) [选择]A.
B. a小于25
C. a大于等于25并且a小于等于100
D. a大于100但小于150
E. a大于150if(a < 25) System.out.println("aaa");else if(a > 150) System.out.println("bbb");else if(a > 100) System.out.println("ccc");else System.out.println("ddd");2.当输出”bbb”的时候,a的值的范围: (2分) [选择]A.
B. a大于等于25
C. a大于等于25并且a小于等于100
D. a大于100但小于150
E. a大于150if(a < 25) System.out.println("aaa");else if(a > 150) System.out.println("bbb");else if(a > 100) System.out.println("ccc");else System.out.println("ddd");3.当输出”ccc”的时候,a的值的范围: (2分) [选择]A.
B. a大于100
C. a大于等于25并且a小于等于100
D. a大于100但小于等于150
E. a大于150if(a < 25) System.out.println("aaa");else if(a > 150) System.out.println("bbb");else if(a > 100) System.out.println("ccc");else System.out.println("ddd");4.当输出”ddd”的时候,a的值的范围: (2分) [选择]A.
B. a大于等于25
C. a大于等于25并且a小于等于100
D. a小于等于100
E. a大于150if(a < 25) System.out.println("aaa");else if(a > 150) System.out.println("bbb");else if(a > 100) System.out.println("ccc");else System.out.println("ddd"); -
用条件语句完成下面的题目1.分类输入的字符 (10分) [编程]import java.util.Scanner;(参考2.15逻辑运算符)输入一个字符并赋值给字符变量c,然后判断c是大写字母、小写字母、数字、还是非字母非数字,输出判断结果。判断结果的输出按照下面的标准:
1.大写字母:大写字母
2.小写字母:小写字母
3.数字:数字
4.非字母非数字:其他
这个是字符输入语句:
Scanner scanner = new Scanner(System.in);
char c = scanner.next().charAt(0);2.按分数输出等级 (10分) [编程]import java.util.Scanner;输入成绩,赋给double型变量score,按照“优”(大于等于90分),“良”(大于等于80分),“中”(大于等于70分),"及格"(大于等于60分),“不及格”(60分以下),“差”(小于等于30分)输出。3.根据字母输出对应的分数范围 (10分) [编程]import java.util.Scanner;从键盘输入一个字符,赋给字符型变量c,判断c的值,如果是’A’,那么输出“85-100”;如果是’B’, 那么输出“70-84”;如果是’C’, 那么输出“60-69”; 如果是’D’, 那么输出“<60”;如果是其他,输出“错误”。4.从键盘输入一个字符 (10分) [编程]import java.util.Scanner;赋给字符变量c,判断c的值,如果是‘f’,那么打印“女性”;如果是‘m’打印“男性”;如果是‘u’打印“未确定”;如果是别的字符,打印“非法字符”5.修改上一题,增加功能(此题没有自动批改) [编程(无自动批改)]import java.util.Scanner;当输入的数字超过范围的时候,例如输入一个5,那么将没有选择,修改代码,当输入的数字超过范围的时候,选择16.计算托运费 (10分) [编程]import java.util.Scanner;乘坐飞机时,每位乘客可以免费托运50kg(包含50KG)以内的行李,直接打印0;如果超过50kg,那么超出部分要按照每公斤1元收取费用;如果超过100KG,超出部分要按照每公斤2元收取费用,如果超过或者等于200KG,则不予托运。
(例如60公斤,超出的10公斤就要付出10元;如果120KG,那么50KG部分免费,50到100KG部分按照每公斤1元收取费用,即50元,100到120KG部分按照每公斤2元收取费用,即40元,一共需要90元费用)。
编写一个程序,输入行李的重量,赋给整型变量g,打印行李托运费,或者提示"超重无法托运"。7.游戏选角色,代码如下 (6分) [填空]下面是游戏选择模拟。首先给出选项,选择职业(1战士、2法师、3猎人);然后选择种族(1人类、2精灵、3矮人),最后选择性别(1男、2女)。要求输入数字选择,适当组织语言。例如“请选择职业(1战士、2法师、3猎人)”,输入哪个数字就对应哪个职业。需要三个整型变量分别来保存职业、种族和性别,然后判断这三个整型变量的值来组织最后打印的语句。使用字符串+来连接多个字符串,具体参考2.6输出
如果依次输入的是1,2,1,输出的是:
如果依次输入的是2,2,3,输出的是:
如果依次输入的是3,1,2,输出的是: