2014-01-15 1 views
-1

Я просто выяснял, как переменные экземпляра работают, но это приводит меня к чему-то странному.Объявление boolean на объекте, не меняет его значение

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(); 
     } 
    } 
} 

Как это возможно, что он выводит: "Bang Bang ба-бэнг динь динь да-динь навылет ба-взрыва"

И не: «Bang Bang ба-челку динь ding da-ding "

Поскольку я думал, что ловушка будет играть только один раз, потому что я объявляю его после d.playSnare(); - d.snare = false;

ответ

6

Удалить точку с запятой в этой строке, которая действует как корпус для вашего блока if.

if (d.snare == true);{ 

Изменить его

if (d.snare == true){ 

Кроме того, d.snare уже boolean, так что вы можете упростить условное выражение:

if (d.snare){ 
1

Вот челка

if (d.snare == true); 

Удалить;