2 回答

TA貢獻(xiàn)1785條經(jīng)驗(yàn) 獲得超8個贊
正如 Nexevis 和 Abhishek Patel 已經(jīng)說過的,您應(yīng)該將許多“靜態(tài)”參數(shù)/方法替換為非靜態(tài)的。話雖這么說,但這并不是您添加新生物出現(xiàn)問題的原因。
我從 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 個,在這些打印輸出之后立即出現(xiàn)了多個打印輸出,例如:
Found food at: 63 32
New Position: 122 121
moved
由此我發(fā)現(xiàn)您在Creature類的構(gòu)造函數(shù)內(nèi)部使用了一個 while 循環(huán),因此構(gòu)造函數(shù)永遠(yuǎn)不會返回,代碼也永遠(yuǎn)不會到達(dá)它添加到 ArrayList 的位置。
你永遠(yuǎn)不應(yīng)該在構(gòu)造函數(shù)中有一個無限的 while 循環(huán)......永遠(yuǎn)......相反,我建議使用類之類的東西Timer來安排更新。我會讓定時器在模擬中調(diào)用一個更新函數(shù),然后模擬在該函數(shù)中的每個生物中調(diào)用一個更新函數(shù)。

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