if…if…和if…else if的区别是什么?

if (条件1)
{
    //语句1
}

if (条件2)
{
    //语句2
}

这种格式中,程序会依次判断条件1和条件2是否成立并根据结果决定是否执行语句1和语句2,也就是说,第一个 if 块和第二个 if 块没有影响(除非在执行第一个 if 块的时候就凶残地 return 了)

而下面这种格式,
if (条件1) 
{
    //语句1
}
else if (条件2)
{
    //语句2
}
if 块和 else if 块本质上是互斥的!也就是说,一旦语句1得到了执行,程序会跳过 else if 块,else if 块中的判断语句以及语句2一定会被跳过;同时语句2的执行也暗含了条件1判断失败和语句1没有执行;当然还有第3个情况,就是条件1和条件2都判断失败,语句1和语句2都没有得到执行。



作者:阿木
链接:https://www.zhihu.com/question/27797637/answer/286456485
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

打个比方,下面有一个程序需要判断成绩。用户需要输入一个成绩,如果成绩大于90,输出A,大于60小于90输出B,小于60输出C,你会怎么写?我举例,用elseif和不用elseif的区别。

------------------------------程序1-----------------------------------------

System.out.println("输入成绩:");

Scanner input = new Scanner(system.in);

int score = input.nextInt();

if(score<101&&score>0){

if(score>=90){System.out.println("A");}

if(score>=60){System.out.println("B");}

if(score<60){System.out.println("C");}

}else{System.out.println("分数应该在1-100之间");}

-------------------------------程序1结束---------------------------------

假如用户输入99结果会如何? 很明显,因为99这个值,条件1(score>=90)和条件2(score>=60)均满足,所以输出结果应该是 A \n B。显然这个不满足用户需求。

所以我们就需要用到else if了。我们在条件2和条件3前各加一个else。

---------------------------程序2-------------------------------

System.out.println("输入成绩:");

Scanner input = new Scanner(system.in);

int score = input.nextInt();

if(score<101&&score>0){

if(score>=90){System.out.println("A");}

else if(score>=60){System.out.println("B");}

else if(score<60){System.out.println("C");}

}else{System.out.println("分数应该在1-100之间");}

-----------------------程序2结束---------------------------------

现在用户再输入一个99。结果就符合需求了,只输出了一个A。

这次输入99,条件1和条件2虽然都满足,但是我们的程序判断,走到if(score>=90),这句的时候发现条件满足,嗯,那我就执行它,然后走到下一行else if(score>=60),当他看到else这句话的时候,直接就跳过了,因为我已经执行过if了,不需要再执行这句话了,就算满足我也不会执行了,就是这么高冷。

 

posted @ 2018-05-15 15:03  chenlife  阅读(1394)  评论(0)    收藏  举报