2016-01-20 3 views
0
  • Получил это приложение BOID для обработки с некоторыми алгоритмами рулевого управления.

enter image description hereУдаление элемента из ArrayList Java Processing Пример Boid

  • В Boids хранятся в двух отдельных ArrayLists для каждого цвета.

  • Красного Бойд (хищник) имеет функцию проводить:

    class Creature { 
        int prey = 1; 
        PVector pursue(ArrayList boids) { 
    
         PVector steer = new PVector(); 
         if (prey < boids.size()) { 
         Creature boid = (Creature) boids.get(prey); 
         steer = PVector.sub(boid.location, location); 
         steer.mult(maxpursue); 
        } 
        return steer; 
        } 
    

Этой функция получает красный Boids стоять на верхней части целевого белого Бойда.

Проблема заключается в том, что этот белый боид исчезнет, ​​когда все красные бои над ним. (Как показано на рисунке выше)

Я могу добавить новый Boid или хищника со следующим, но я не могу удалить ?:

+2

Почему вы создаете экземпляр, добавляете его и сразу же удаляете из списка? –

+0

Теперь вы отредактировали код так, чтобы 'planet.boids.remove (boid);' фактически не является частью какого-либо метода. Пожалуйста, разместите * фактический код *, который вы утверждаете, не работает. –

+0

Это было просто для тестирования. Если я удалю создание нового экземпляра, он не сможет распознать «хищник». И я не знаю, как изменить код так, чтобы он это делал. Пробовал такие вещи, как .. planet.boids.add (Существо хищник); , planet.boids.add (Creature.predator); ? –

ответ

1

код, который вы размещены не делает тонну смысла , Вы хотите удалить существующихBoid, так почему же вы создаете новый, а затем сразу же удаляете его?

Вы не отправил MCVE, так что я могу ответить только в общем смысле, но вот то, что вам нужно сделать:

Шаг 1: реорганизовать код так, что он имеет больше смысла. Прокомментируйте каждую строку, если вам нужно, просто чтобы быть уверенным, что вы точно знаете, что делает код. Но вы не должны делать такие вещи, как добавление нового Boid, а затем удаление его в следующей строке. Разделите проблему на более мелкие шаги и убедитесь, что каждый шаг работает отлично сам, прежде чем пытаться смешивать его с другой функциональностью.

Шаг 2: Создайте функцию, которая принимает один white Boid и List из red Boids, и возвращает true если white Boid должны быть удалены. Протестируйте эту функцию самостоятельно, используя жестко закодированные значения в отдельном эскизе примера.

Шаг 3: Идите по своему white Boids и вызовите функцию, созданную на шаге 2 для каждого из них. Если функция возвращает true, удалите ее white Boid. Вы можете использовать Iterator для этого шага.

Если вы застряли на одном из этих шагов, отправьте сообщение MCVE вместе с вопросом , а именно:, и мы отправимся оттуда. Трудно ответить на общие вопросы «как это сделать?», Но гораздо легче ответить на конкретные «Я попробовал X, ожидал Y, но получил Z вместо» типа вопросов, особенно если у нас есть MCVE, мы можем фактически запустить на нашем собственные машины вместо некоторых отключенных фрагментов.

Смежные вопросы