100门任务:for循环不起作用,否则罚款

时间:2012-12-01 17:23:37

标签: java

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

我的问题是门[5] .passDoor(j)的循环根本不起作用。无论是在运行时还是在编译时都没有出现错误。什么都没发生。离开程序一段时间并回到它没有任何作用,表示它没有在后台做任何事情。现在这个代码解决了问题,如果你只是说门[5] .passDoor(2)然后3,然后4到100.问题是,这是一个浪费的事情,因此我反而想用一个for循环。

关于静态对象数组:对不起,我这样做是为了在测试阶段使事情变得更容易,并在我启动并运行时修复一些事情(通过使数组专用于类)门)。

我只是在这里张贴这个,因为我完全不知道为什么会这样。没有错误在互联网上搜索,没有冻结所以我知道它可能不是一个无限(或长)循环,似乎没有人有100门的类似问题(虽然这可能是因为他们没有采取面向对象正如我所做的那样接近它。此外,如果你按照我所说的那样输入100次代码就可以完全正常运行(或者至少,如果我有耐心实际输入它100次,它就会出现这种情况。)

最后注意,这里的循环对于x的任何值都不起作用,其中j&lt; X。 (我在这里缺少的必须是明显而简单的东西)。

1 个答案:

答案 0 :(得分:4)

passDoor无效的原因是您将increment 0传递给:

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

因此k的值永远不会增加,从而导致无限循环。