Проблема с выводом массива в итераторе. Пропускается элемент с нулевым индексом
Суть состоит в том, что в main мы можем задавать шаг для итерации через iterator.changeSpeed(...). Итератор перебирает и выводит элементы массива. Проблема состоит в том, что какое бы значение для шага мы не вводили, всегда будет пропускаться 0-й элемент.
Harmonica harmonica = new Harmonica(originPointList);
PointIterator iterator = harmonica.iterator(); //вывод списка точек в консоль
iterator.changeSpeed(1);
System.out.println("List's length: " + harmonica.getPointsListLength() + "\n");
while (iterator.hasNext()){
System.out.println(iterator.next());
}
Я знаю, что проблема состоит в этой части кода (что указана ниже), а именно в строке return pointList.get(index += speed), т.к. к index сначала прибавляется указанное значение шага, а только потом возвращается index. Если в условии указать index =+ speed, то программа зациклится на выводе элемента с 1-м индексом.
public PVTPoint next() {
if(this.hasNext()) {
return pointList.get(index = + speed);
}else {
throw new NoSuchElementException();
}
}
Мой вопрос состоит в том, как решить этот момент, чтобы сначала возвращался index, а только потом прибавлялся новый шаг и не пропускался элемент с 0-м индексом?
Ответы (2 шт):
if (this.hasNext()) {
PVTPoint result = pointList.get(index);
index += speed;
return result;
} else {
Альтернативный вариант, при котором индекс будет рассчитываться каждый раз:
public PVTPoint next() {
if (this.hasNext()) {
return pointList.get((speed - 1) * index + index++);
} else {
throw new NoSuchElementException();
}
}