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),它只在它自己的包内可见(包被命名为相关类的组——您将在后面的课程中了解它们。)
添加回答
举报