Помогите разобраться с циклом (Iterator) для List

121
16 декабря 2020, 17:10

У меня есть ArrayList box (коробка с фигурами). Мне нужно реализовать метод, который вытаскивает из коробки все круглые фигуры. Вроде бы всё делаю правильно, но записывает почему-то только одну фигуру. Что не так?

Мой класс Box:

public class Box {
    private List<Figure> box = new ArrayList<>();
    public boolean addFigure(Figure figure) {
        if (box.contains(figure)) {
            return false;
        }
        box.add(figure);
        return true;
    }
public List<Figure> getAllCircles() {
        List<Figure> circles = new ArrayList<>();
        for (ListIterator<Figure> iterator = box.listIterator(); iterator.hasNext(); ) {
            if (iterator.next() instanceof Circle) {
                circles.add(iterator.next());
            }
        }
        return circles;
    }
}

Мой класс Main:

  public class Main {
    public static void main(String[] args) {
        Box box = new Box();
        PaperCircle paperCircle = new PaperCircle(5);
        PaperCircle paperCircle1 = new PaperCircle(9);
        System.out.println(box.addFigure(paperCircle));
        System.out.println(box.addFigure(paperCircle1));
        for (Iterator<Figure> a = box.getAllCircles().listIterator(); a.hasNext();) {
            System.out.println(a.next());
        }
    }
}

Вывод в консоль:

true
true
PaperCircle: radius = 9.0, Color: null

Почему теряется мой круг с радиусом 5.0 ?

Answer 1

Вместо

if (iterator.next() instanceof Circle) {
  circles.add(iterator.next());
}

использовать

Figure figure = iterator.next();
if (figure instanceof Circle) {
  circles.add(figure);
}

или отказаться от итератора вообще, т.к. тут он вовсе не нужен

вместо

for (ListIterator<Figure> iterator = box.listIterator(); iterator.hasNext(); ) {
    if (iterator.next() instanceof Circle) {
        circles.add(iterator.next());
    }
}

использовать

for (Figure figure : circles) {
  if (figure instanceof Circle) {
    circles.add(figure);
  }
}
READ ALSO
Подключение библиотеки в IntelliJ IDEA

Подключение библиотеки в IntelliJ IDEA

Нашел библиотеку на GitHub https://githubcom/processing/processing-sound но не понимаю как подключить без jar файла, Maven не использую

117
Замена компонента с помощью Mockito

Замена компонента с помощью Mockito

Писал тест для своего проекта на Spring Boot и появилась проблема: класс, который я тестирую, использует в одном из своих методов компонент CrudRepository...

103
Браузер не читает фоновое изображение

Браузер не читает фоновое изображение

Привет я хочу поставить фоновое изображение своему сайтуНо браузер не читает его

114
Можно ли как-то отслеживать возникающие на устройствах ошибки онлайн?

Можно ли как-то отслеживать возникающие на устройствах ошибки онлайн?

Я не силен в android разработке, но интересует вопрос, есть ли какие-то сервисы для сбора логов устройств онлайн, error-трекеры для android? Если кто-то...

115