2013-09-29 28 views
-2

我在想,如果有这两个码之间的任何差别:区别,如果,如果(JAVA)

代码1:

if(isSleepy()){ 
    sleep(1); 
} else if (isBored()){ 
    dance(); 
    dance(); 
} else { 
    walkRight(50); 
    walkLeft(50); 
    if(isHungry()){ 
     eat(); 
    } 
} 

代码2:

if(isSleepy()){ 
    sleep(1); 
} 
if (isBored()){ 
    dance(); 
    dance(); 
} 
walkRight(50); 
walkLeft(50); 
if(isHungry()){ 
    eat(); 
} 

我如果仅替换if-elseif-if链。这是否会影响有条件的过程?

+1

你试过运行它,看看会发生什么? –

+0

是的。由于布尔型疲劳是错误的,所以在第一种情况下它会做“跳舞”两次。在跳舞两次后,“吃()”没有被调用,所以我才来到这里来了解有条件的过程。 – Dreadlockyx

回答

3

这会影响条件过程吗?

是的,它的作用。在第一种情况下,如果isSleepy()返回true,则从不调用isBored(),也不检查其结果。在第二种情况下,它检查,它是完全独立的。同样,如果isSleepy()返回true,则walkRightwalkLeft将不会在第一个块中调用,但他们位于第二个块中。

第一个代码块的重新格式化可能有助于使事情更加清晰;

if(isSleepy()){ 
    sleep(1); 
} else { 
    // The below only happens if isSleepy() returned false 
    if (isBored()){ 
     dance(); 
     dance(); 
    } else { 
     // These only happen if isSleepy() returned false AND isBored() returned false 
     walkRight(50); 
     walkLeft(50); 
     if(isHungry()){ 
      eat(); 
     } 
    } 
} 
+1

感谢您的明确解释。代码内评论帮助很大。 – Dreadlockyx

0

else if仅在前面的if条件失败时检查。如果一个接一个地执行和评估,无论preceeding if语句发生了什么,简单。

要了解,如果简单地条件else iftrue这要是if条件为真本身是从来没有检查翻译if-else意味着

0

在第一种情况下,else块从未检查。

在第二种情况下,两个if条件都被检查并且第三个块不在任何条件之内,它总是被执行。

这会影响有条件的过程吗?

在第一个代码中,条件是互斥的,但在第二个代码中,两个条件可能同时为真。