Как правильно? - Java

Узнай цену своей работы

Формулировка задачи:

Есть два списки, которые пополняются и очищаются: - пули, которые постоянно создаются и удаляются, когда вылетают за пределы екрана или когда касаются врагов; - враги, которые создаются не в бесконечном количестве, а порциями по 5, не вылетают за пределы екрана и должны уничтожатся при прикосновении с пулей. Такое уничтожение я пытаюсь реализовать в следующем методе. Такой метод работает и удаляет пулю и врага при их соприкосновении. Проблема следующая: Выбрасывает ошибку при определенном моменте, но не всегда. "Как карта ляжет". Как мне кажеться, ошибка чаще выбрасывается при большом количестве врагов или пуль на екране. Я новичек, потому еще не очень много понимаю
Листинг программы
  1. public void testCllisionEnemyWithPatron() {
  2. Iterator<Patron> patronsIterator = Patron.patrons.iterator();
  3. while(patronsIterator.hasNext()) {
  4. Patron p = patronsIterator.next();
  5. Iterator<Enemy> enemiesIterator = Enemy.enemies.iterator();
  6. while(enemiesIterator.hasNext()) {
  7. Enemy e = enemiesIterator.next();
  8. if(e.getRect().intersects(p.getPatronsRect())) {
  9. patronsIterator.remove(); // сюда указывает ошибка
  10. enemiesIterator.remove();
  11. }
  12. }
  13. }
  14. }
Ошибка:
Exception in thread "AWT-EventQueue-0" java.lang.IllegalStateException at java.util.ArrayList$Itr.remove(Unknown Source) at newjavapj.Background.testCllisionEnemyWithPatron(Background.java:155) at newjavapj.Background.actionPerformed(Background.java:96) at javax.swing.Timer.fireActionPerformed(Unknown Source) at javax.swing.Timer$DoPostEvent.run(Unknown Source) at java.awt.event.InvocationEvent.dispatch(Unknown Source) at java.awt.EventQueue.dispatchEventImpl(Unknown Source) at java.awt.EventQueue.access$500(Unknown Source) at java.awt.EventQueue$3.run(Unknown Source) at java.awt.EventQueue$3.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) at java.awt.EventQueue.dispatchEvent(Unknown Source) at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.run(Unknown Source)

Решение задачи: «Как правильно?»

textual
Листинг программы
  1. public void testCllisionEnemyWithPatron() {
  2.     ArrayList<Patron> patrons = getPatrons();
  3.     for(Patron p : patrons){
  4.          Rectangle r1 = p.getBounds();
  5.               for(Enemy e : enemies){
  6.                    Rectangle r2 = e.getBounds();
  7.                    
  8.                 if(r1.intersects(r2)){
  9.                    p.setVisible(false);
  10.                    e.setVisible(false);
  11.            }
  12.  
  13.      }
  14.   }
  15. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.8 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут