java - 将项目添加到 arraylist 不会添加它?

标签 java

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

我尝试过 setter/getter 。 Simulation.getCreatures.add(生物)。 我尝试过手动访问它。 creatures.add(creature)。 我尝试过添加方法。 Simulation.addCreature(生物)。 这些都不起作用

这是主类的一个片段。是的,我已将其放入 main 方法中,并且之前的代码工作得很好。它很好地创造了这个生物。但它忽略了 addCreature 和 print。

(抱歉,我无法使代码格式正常工作。如果有人也能帮助我,我将不胜感激)

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

这是我的模拟类(class)的片段。在 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 类之类的东西来安排更新。我会让计时器在模拟中调用更新函数,然后模拟在该函数中的每个生物中调用更新函数。

关于java - 将项目添加到 arraylist 不会添加它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56775879/

相关文章:

java - 未找到 maven-compiler-plugin

java - 用于在多个类中使用 sessionFactory 的 bean

java - WearableRecyclerView Android Wear OS

java - 以编程方式读取队列的参数

java - 在属性文件中写入字符串时,如何跳过\?

java - Android 上的谷歌地图 Activity

Java检测客户端与服务器的断开连接

java - 使用连接请求设置 session

java - 继续声明不起作用

java - XYChart.Data getNode() 为空