将项目添加到 arraylist 不添加它?

所以基本上我正在做一个有趣的小项目。我制作了一个 Creature 对象,并在 Simulation 类中制作了一个生物列表。问题是无论我如何访问列表,它都不会添加该项目。它似乎完全忽略了添加语句之后编写的所有代码。


我试过吸气剂。Simulation.getCreatures.add(creature). 我试过手动访问它。creatures.add(creature). 我试过制作一个添加方法。Simulation.addCreature(creature). 这些都不起作用


这是主类的一个片段。是的,我已经把它放在主要方法中,之前的代码工作得很好。它很好地创造了这个生物。但它忽略了 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


慕莱坞森
浏览 69回答 2
2回答

慕的地10843

正如 Nexevis 和 Abhishek Patel 已经说过的,您应该将许多“静态”参数/方法替换为非静态的。话虽这么说,但这并不是您添加新生物出现问题的原因。我从 GitHub 下载了您的代码并将以下打印输出添加到您的主类:&nbsp; &nbsp; System.out.println("1");&nbsp; &nbsp; setDebugActive(false);&nbsp; &nbsp; System.out.println("2");&nbsp; &nbsp; frame = new Frame();&nbsp; &nbsp; System.out.println("3");&nbsp; &nbsp; Simulation.setSimulationState(true);&nbsp; &nbsp; System.out.println("4");&nbsp; &nbsp; System.out.println("5");&nbsp; &nbsp; Creature creature = new Creature(420, 120, 120, 1);&nbsp; &nbsp; System.out.println("6");&nbsp; &nbsp; Simulation.addCreature(creature);&nbsp; &nbsp; System.out.println("yes");&nbsp; &nbsp; System.out.println(Simulation.getCreatures().size());我注意到只打印了 1-5 个,在这些打印输出之后立即出现了多个打印输出,例如:Found food at: 63 32New Position: 122 121moved由此我发现您在Creature类的构造函数内部使用了一个 while 循环,因此构造函数永远不会返回,代码也永远不会到达它添加到 ArrayList 的位置。你永远不应该在构造函数中有一个无限的 while 循环......永远......相反,我建议使用类之类的东西Timer来安排更新。我会让定时器在模拟中调用一个更新函数,然后模拟在该函数中的每个生物中调用一个更新函数。

慕运维8079593

正如@Nexevis 所说,您似乎在Simulation课堂上错误地使用了 static 。此外,您需要从外部访问的每个函数都应该在其前面有一个修饰符以将其设置为public.&nbsp;根据 Java 文档,如果一个类没有修饰符(默认,也称为 package-private),它只在它自己的包内可见(包被命名为相关类的组——您将在后面的课程中了解它们。)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java