2012-12-01 12 views
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();  
    } 
} 

我的問題在於,門[5] .passDoor(j)的循環完全不起作用。沒有錯誤出現,無論是在運行時還是在編譯時。什麼都沒發生。離開這個程序一段時間後再回到它沒有任何意義,這意味着它在後臺沒有做任何事情。現在這個代碼解決了這個問題,如果你簡單地說門[5] .passDoor(2)然後是3,然後是4到100。問題是,這是一個浪費的事情要做,所以我反而想要做一個for循環。100門任務:for循環將無法正常工作,否則罰款

關於對象的靜態數組:我爲此做了一些事情,以便在測試階段更容易,並且在啓動並運行時將其修復(通過使數組專用於班門)。

我只是真的發佈這裏,因爲我完全喪失了爲什麼發生這種情況。沒有錯誤在互聯網上搜索,沒有凍結,所以我知道它可能不是一個無限(或長)的循環,沒有人似乎有100門類似的問題(儘管這可能是因爲他們沒有采取面向對象就像我所做的那樣)。此外,如果您按照我的說法輸入了100次(或者至少,如果我有足夠的耐心將其輸出100次),則代碼完全正常工作。

最後注意,這裏的循環不適用於x的任何值,其中j < x。 (我在這裏失蹤的東西肯定是明顯而簡單的東西)。

+3

奇怪的是,你在'passDoor()'裏面的'if'和'else'裏面'door [k] .close()'... –

+0

是的,我認爲我是爲了調試目的而忘了離開它在這裏發佈時發佈。 –

回答

4

原因passDoor將無法​​正常工作是你通過0increment到:

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

所以k值永遠不會增加導致無限循環。

+0

啊謝謝,知道這是簡單的! –

+0

好的。 ... –

+0

如果有人想知道我如何解決這個問題,那簡直就是將j設置爲等於2的問題。打印出懷疑是完美廣場的列表。再次感謝大家! –