Добавление элемента в arraylist не добавляет его? - PullRequest
0 голосов
/ 26 июня 2019

Так что в основном я делаю небольшой проект для развлечения.Я создал объект 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

Ответы [ 2 ]

3 голосов
/ 26 июня 2019

Как уже сказали 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

Исходя из этого, я обнаружил, что вы используете цикл while внутри конструктора вашего Creature класса, поэтому конструктор никогда не возвращается, и код никогда не достигает точки, где он добавляется в ArrayList.

У вас никогда не должно быть бесконечного цикла while в конструкторе ... никогда ... Вместо этого я бы предложил использовать что-то вроде класса Timer для планирования обновлений. Я бы попросил Timer вызвать функцию обновления в Simulation, а затем имитация вызовет функцию обновления у каждого из существ в этой функции.

0 голосов
/ 26 июня 2019

Как сказал @Nexevis, вы, похоже, неправильно используете static в классе Simulation. Кроме того, перед каждой функцией, к которой вам нужно получить доступ извне, должен быть установлен модификатор, чтобы установить ее как public. Согласно документации Java,

Если класс не имеет модификатора (по умолчанию, также известного как package-private), он виден только внутри своего собственного пакета (пакеты называются группами связанных классов - вы узнаете о них на следующем уроке.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...