所以基本上我是在做一个有趣的小项目。我创建了一个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
答案 0 :(得分:3)
正如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中调用一个更新函数,然后在该函数中的每个生物中模拟调用一个更新函数。
答案 1 :(得分:0)
就像@Nexevis所说的那样,您似乎在Simulation
类中错误地使用了static。另外,您需要从外部访问的每个函数都应在其前面加上一个修饰符,以将其设置为public
。根据Java文档,
如果一个类没有修饰符(默认值,也称为package-private),则仅在其自己的包中可见(包被命名为相关类的组,您将在以后的课程中对其进行了解。)< / p>