0
public class OneHundredDoors 
{
    static OneHundredDoors.Door[] doors = new OneHundredDoors.Door[100];

    static public class Door
    {
        public int doorClosed = 0;

        public void open ()
        {
            this.doorClosed = 0;
        }
        public void close ()
        {
            this.doorClosed = 1;
        }
        private void printStatus (int address)
        {
            if (this.doorClosed == 0)
            {
                System.out.println("Door: " + address + " is Open!");
            }
        }
        public void printStatusOfAll ()
        {
            for (int i = 0; i < doors.length; i++)
            {
                doors[i].printStatus(i);
            }

        }
        public void passDoor (int increment)
        {
            for (int k = 0; k < doors.length; k += increment)
            {
                if (doors[k].doorClosed == 0)
                {
                    doors[k].close();
                }
                else
                {
                    doors[k].close();
                }                       
            }
        }
    }
    public static void main (String [] args)
    {
        for (int i = 0; i < doors.length; i++)
        {
            doors[i] = new OneHundredDoors.Door ();
        }
        for (int j = 0; j < doors.length; j++)
        {
            doors[5].passDoor(j);
        }
        doors[5].printStatusOfAll();    
    }
}

我的问题是doors[5].passDoor(j) 的循环根本不起作用。在运行时或编译时都不会出现错误。什么都没发生。离开程序一段时间然后再回来什么都不做,这表明它没有在后台做任何事情。现在这段代码解决了这个问题,如果你简单地说 door[5].passDoor(2) 然后是 3,然后是 4 到 100。问题是这样做很浪费,因此我想用 for环形。

关于对象的静态数组:对不起,我这样做是为了在测试阶段让事情变得更容易,并在我启动并运行时修复问题(通过将数组设为类 Door 的私有)。

我只是真的在这里发布这个,因为我完全不知道为什么会这样。在互联网上搜索没有错误,没有冻结,所以我知道它可能不是无限(或长)循环,而且似乎没有人在 100 扇门上遇到类似的问题(尽管这可能是因为他们没有采用面向对象像我所做的那样接近它)。此外,如果您像我所说的那样输入 100 次代码,代码完全可以正常工作(或者至少,如果我有耐心实际输入 100 次,它似乎会这样做)。

最后请注意,这里的循环不适用于 j < x 的任何 x 值。(因此,我在这里缺少的东西必须是显而易见的和简单的)。

4

1 回答 1

4

passDoor不起作用的原因是您将incrementof传递0给:

for (int k = 0; k < doors.length; k += increment) {

所以k从不增加的值会导致无限循环。

于 2012-12-01T17:29:33.287 回答