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大于150
    if(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大于150
    if(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大于150
    if(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大于150
    if(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,那么将没有选择,修改代码,当输入的数字超过范围的时候,选择1
    6.计算托运费 (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,输出的是: