2014-10-28 73 views
1

我有一個循環運行,當它到達else語句時它應該停止運行。當我調試布爾功率更新但它仍然進入循環。我知道我可以使用System.Exit(0);或休息;但我會理解爲什麼它會繼續以假條件運行的邏輯?爲什麼while循環在條件= false時不退出

public class Mmu {  
    //code omitted 
    public static final Mmu MMU = new Mmu(); 

    public static void main(String[] args) { 
     MMU.runProcesses(); 
     //code omitted 
    } 
     private Mmu() { 
      //code omitted 
     } 
    protected void runProcesses(){ 
     boolean power= false; // running processes, normally this would start as false but I changed to test 
     boolean twoFinished = false; 
     boolean oneFinished = false; 
     while (power = true) { //still entering this when power = false why 
      twoFinished = MMU.processTwo.finished(); 
      oneFinished = MMU.processOne.finished(); 
      if (oneFinished = false) { 
       MMU.processOne.thread(); 
      } else if (twoFinished = false) { 
       MMU.processTwo.thread(); 
      } else { 
       power = false; 
       System.out.println("All processes Finished"); 
       //System.exit(0); 
      } 
     } 
    } 
} 

感謝您的任何建議提前。

+0

'power = true'是賦值,而不是比較;)。你需要'power == true',或者'while(power)'。 – theGreenCabbage 2014-10-28 07:37:06

+0

'='是賦值運算符,'=='是比較運算符 – 2014-10-28 07:37:12

+0

'while(power == true)'note double == == – 2014-10-28 07:37:12

回答

10
while (power = true) 

總是true因爲你分配和不進行比較。

寫:

while(power) 

代替。


分配的表達式返回分配值。

這就是爲什麼我們不喜歡使用==當我們比較boolean時,可能會導致這種錯誤。您可以簡單地寫if(someBoolean)而不是if(someBoolean == true)

+0

注意:OP在'if'和'else-if '條件 – 2014-10-28 07:39:12

+0

只是向人解釋,這也可以工作: while(power == true) – maslan 2014-10-28 07:40:35

+0

謝謝,只是爲了澄清if語句是否應該是if(power == true) – user1642671 2014-10-28 07:57:45

5

while (power = true)這裏您正在使用分配運算符並再次分配power = true。使用while(power)