快速程序帮助(快速修复)

时间:2015-04-14 18:46:58

标签: java arrays object methods

我有一个家庭作业,我需要制作一组灯泡对象。然后添加一个方法来“打开它们”。我需要一个嵌套的循环,让一个假想的人打开每个灯泡,然后每隔一个灯泡拉上灯串,然后每隔三个灯泡,依此类推,直到每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");

    }
}

2 个答案:

答案 0 :(得分: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设置为true。我想这就是你想要的:

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

答案 1 :(得分: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();
     }
  }