У меня есть 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 ?
Вместо
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);
}
}
Продвижение своими сайтами как стратегия роста и независимости