2014-01-15 42 views
-1

我只是想知道實例變量是如何工作的,但它讓我感到奇怪。聲明對象的布爾值,不會改變他的值

public class DrumKit { 
    boolean topHat = true; 
    boolean snare = true; 

    void playTopHat() { 
     System.out.println("ding ding da-ding"); 
    } 

    void playSnare(){ 
     System.out.println("bang bang ba-bang");   
    } 
} 

public class DrumKitTestDrive { 
    public static void main(String [] args) { 

     DrumKit d = new DrumKit(); 
     d.playSnare(); 
     d.snare = false; 
     d.playTopHat(); 

     if (d.snare == true);{ 
      d.playSnare(); 
     } 
    } 
} 

這怎麼可能,它輸出: 「嘭嘭BA-爆炸 頂頂大鼎 嘭嘭BA-砰」

而不是:「棒棒BA-爆炸 丁丁大定「

因爲我認爲是網羅只會播放一次,因爲我在d.playSnare()之後聲明它。 to d.snare = false;

回答

6

刪除該行中的分號,該行用作if塊的主體。

if (d.snare == true);{ 

將其更改爲

if (d.snare == true){ 

此外,d.snare已經是boolean,這樣可以簡化條件表達式:

if (d.snare){ 
1

這裏的爆炸

if (d.snare == true); 

刪除;