2015-04-14 137 views
-3

我有一個家庭作業任務,我需要製作一組燈泡對象。然後添加一個方法來「打開它們」。我需要一個嵌套循環讓一個想象中的人打開每個燈泡,然後每隔一個燈泡拉動一下,然後每隔三分鐘拉直到每20個燈泡。這是我的代碼。它編譯,但是當我運行它時,它會一直持續下去。請幫助快速程序幫助(快速修復)

public class LightBulb 
    { 
     public boolean isTurnedOn; 

     public LightBulb() 
     { 
     isTurnedOn = false; 
     } 


     public boolean isOn() 
     { 
     if(isTurnedOn==false) 
     return false; 
     return true; 
     } 


     public void pullString() 
     { 
     if(isTurnedOn==true){ 
     isTurnedOn=false; 
     } 
     isTurnedOn=true; 

     } 

    } 



public class LightDriver 
{ 

    public static void main(String[]arg) 
    { 
     int numOn=0; 
     LightBulb[]Bulb=new LightBulb[100]; 
     for(int a=0;a<100;a++){ 
      Bulb[a]=new LightBulb(); 
     } 
     for(int b=0;b<=19;b++){ 
      for(int c=0;c<=100;c=b+1){ 
       Bulb[c].pullString(); 
      } 
     } 
     for(int d=0;d<100;d++){ 
      if(Bulb[d].isTurnedOn==true){ 
       numOn++; 
      } 
     } 
     System.out.println(numOn+" lightbulbs are on"); 

    } 
} 

回答

1

你的問題是,在這個循環

for(int b=0;b<=19;b++){ 
    for(int c=0;c<=100;c=b+1){ 
     Bulb[c].pullString(); 
    } 
    } 

你的c的值永遠不會增加,因爲它總是被設置爲b+1其中 - 在B環的單次迭代內 - 永遠不會改變。因此,你永遠不會達到循環的終止條件。這裏是一個修復

for(int b=0;b<=19;b++){ 
    int c = b+1; //assign initial value outside of inner loop 
    for(;c<=100;c++){ //increment value inside of inner loop 
     Bulb[c].pullString(); 
    } 
    } 
2

這是造成問題的原因:

for(int b=0;b<=19;b++){ 
    for(int c=0;c<=100;c=b+1){ 
     Bulb[c].pullString(); 
    } 
} 

對於內部for循環的每次迭代中,要設置c = b + 1這意味着c沒有改變,因爲b沒有改變。

我想你想要的是這樣的:

for(int b=1; b <= 20; b++){ 
    for(int c=0; c < 100; c = c + b){ 
     Bulb[c].pullString(); 
    } 
} 

此外,您的拉線方法設置isTurnedOn真不管它原來是。我認爲這是你想要的:

public void pullString() 
{ 
    if (isTurnedOn) 
    { 
     isTurnedOn = false; 
    } 
    else 
    { 
     isTurnedOn = true; 
    } 
} 
+0

謝謝你,但它仍然永遠運行。這絕對是一個問題,但顯然還有另一個潛伏的問題。 – Ryan206

+0

它看起來不是什麼問題......也許發佈'pullString()'方法? – mmking

+0

好的。我把它添加到原帖 – Ryan206