2015-04-14 2 views
-3

У меня есть домашнее задание, где мне нужно создать массив объектов лампочки. Затем добавьте метод «включить их». Мне нужно иметь вложенную петлю, чтобы воображаемый человек включал каждую лампочку, затем вытаскивал строку на каждую другую лампочку, затем каждую третью и так далее, до каждых 20 лампочек. Это код, который у меня есть. Он компилируется, но когда я запускаю его, он просто уходит навсегда. ПОМОГИТЕQuick Help программы (быстрое исправление)

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

ваше значение с не увеличивается, так как она всегда устанавливается в b+1, который - в рамках одной итерации цикла б - никогда не меняется. Таким образом, вы никогда не достигаете условия завершения цикла. Вот затруднительное

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

Кроме того, ваш метод pullString не устанавливает isTurnedOn истина, независимо от того, что он изначально был. Я думаю, что это именно то, чего вы хотите:

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

Спасибо, но он все еще работает вечно. Это определенно проблема, но, по-видимому, есть еще одна. – Ryan206

+0

Не похоже, что что-то не так ... Может быть, вывести метод 'pullString()'? – mmking

+0

хорошо. Я добавил его к исходному сообщению – Ryan206

Смежные вопросы