2 回答

TA貢獻1785條經驗 獲得超8個贊
正如 Nexevis 和 Abhishek Patel 已經說過的,您應該將許多“靜態”參數/方法替換為非靜態的。話雖這么說,但這并不是您添加新生物出現問題的原因。
我從 GitHub 下載了您的代碼并將以下打印輸出添加到您的主類:
System.out.println("1");
setDebugActive(false);
System.out.println("2");
frame = new Frame();
System.out.println("3");
Simulation.setSimulationState(true);
System.out.println("4");
System.out.println("5");
Creature creature = new Creature(420, 120, 120, 1);
System.out.println("6");
Simulation.addCreature(creature);
System.out.println("yes");
System.out.println(Simulation.getCreatures().size());
我注意到只打印了 1-5 個,在這些打印輸出之后立即出現了多個打印輸出,例如:
Found food at: 63 32
New Position: 122 121
moved
由此我發現您在Creature類的構造函數內部使用了一個 while 循環,因此構造函數永遠不會返回,代碼也永遠不會到達它添加到 ArrayList 的位置。
你永遠不應該在構造函數中有一個無限的 while 循環......永遠......相反,我建議使用類之類的東西Timer來安排更新。我會讓定時器在模擬中調用一個更新函數,然后模擬在該函數中的每個生物中調用一個更新函數。

TA貢獻1876條經驗 獲得超5個贊
正如@Nexevis 所說,您似乎在Simulation
課堂上錯誤地使用了 static 。此外,您需要從外部訪問的每個函數都應該在其前面有一個修飾符以將其設置為public
. 根據 Java 文檔,
如果一個類沒有修飾符(默認,也稱為 package-private),它只在它自己的包內可見(包被命名為相關類的組——您將在后面的課程中了解它們。)
添加回答
舉報