将项目添加到arraylist不会添加吗?

时间:2019-06-26 15:04:34

标签: java

所以基本上我是在做一个有趣的小项目。我创建了一个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

2 个答案:

答案 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>