【问题标题】:Quick Program help (quick fix)快速程序帮助(快速修复)
【发布时间】:2015-04-14 18:46:58
【问题描述】:

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

    }
}

【问题讨论】:

    标签: java arrays object methods


    【解决方案1】:

    这是导致问题的原因:

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

    【讨论】:

    • 谢谢,但它仍然会永远运行。这绝对是一个问题,但显然还有另一个问题。
    • 看起来并没有什么问题......也许发布pullString()方法?
    • 等等,我没看到。我和你差不多在同一时间编辑了这个问题,我可能不小心把它删掉了。
    • 它现在应该在那里。非常感谢您的帮助
    • 它不应该永远运行。我将c &lt;= 100 更改为c &lt; 100,否则会出现IndexOutOfBoundsException。我想验证两件事:在您的 pullString() 方法中,您将 isTurnedOn 设置为 true,而不管它最初是什么。你打算这样做吗?此外,您永远不会调用 isOn() 方法。你有什么理由保留它吗?
    【解决方案2】:

    你的问题在这个循环中

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-15
      • 1970-01-01
      • 1970-01-01
      • 2011-10-17
      • 2010-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多