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門任務:for循環將無法正常工作,否則罰款
關於對象的靜態數組:我爲此做了一些事情,以便在測試階段更容易,並且在啓動並運行時將其修復(通過使數組專用於班門)。
我只是真的發佈這裏,因爲我完全喪失了爲什麼發生這種情況。沒有錯誤在互聯網上搜索,沒有凍結,所以我知道它可能不是一個無限(或長)的循環,沒有人似乎有100門類似的問題(儘管這可能是因爲他們沒有采取面向對象就像我所做的那樣)。此外,如果您按照我的說法輸入了100次(或者至少,如果我有足夠的耐心將其輸出100次),則代碼完全正常工作。
最後注意,這裏的循環不適用於x的任何值,其中j < x。 (我在這裏失蹤的東西肯定是明顯而簡單的東西)。
奇怪的是,你在'passDoor()'裏面的'if'和'else'裏面'door [k] .close()'... –
是的,我認爲我是爲了調試目的而忘了離開它在這裏發佈時發佈。 –