簡體   English   中英

將項目添加到arraylist不會添加嗎?

[英]Adding item to arraylist doesnt add it?

所以基本上我是在做一個小項目,很有趣。 我創建了一個Creature對象,在Simulation類中,創建了一個生物列表。 問題是,無論我如何訪問列表,它都不會添加該項目。 它似乎完全忽略了add語句之后編寫的所有代碼。

我已經嘗試過吸氣劑。 Simulation.getCreatures.add(creature) 我嘗試過手動訪問它。 creatures.add(creature) 我試圖做一個添加方法。 Simulation.addCreature(creature) 這些作品都不是

這是主要課程的摘要。 是的,我已經將它放在main方法中,並且在此之前的代碼可以正常工作。 它創造的生物就很好。 但是它忽略了addCreature和打印。

(對不起,但是我無法使代碼格式正常工作。如果有人也可以幫助我,將不勝感激)

Creature creature = new Creature(420, 120, 120, 1);
Simulation.addCreature(creature);
System.out.println("yes");

這是我的模擬課程的摘要。 在addCreature部分中,它甚至不會打印。

private static ArrayList<Creature> creatures = new ArrayList<>();
static void addCreature(Creature creature){
System.out.println("ADDED CREATURE");
creatures.add(creature);
}

沒有錯誤消息。 在此先多謝,希望您能指出我做錯的事情。

如果您需要完整的代碼: https : //github.com/SearchForMe/Simulation

正如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類之類的東西來安排更新。 我將讓Timer在Simulation中調用一個更新函數,然后在該函數中的每個生物中模擬調用一個更新函數。

正如@Nexevis所說,您似乎在Simulation類中錯誤地使用了static。 此外,您需要從外部訪問的每個函數都應在其前面加上一個修飾符,以將其設置為public 根據Java文檔,

如果一個類沒有修飾符(默認值,也稱為package-private),則它僅在其自己的包中可見(包被命名為相關類的組,您將在以后的課程中對其進行了解。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM