Stack Overflow на русском Asked by XenoProxy on November 25, 2021
Суть состоит в том, что в 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-м индексом?
Альтернативный вариант, при котором индекс будет рассчитываться каждый раз:
public PVTPoint next() {
if (this.hasNext()) {
return pointList.get((speed - 1) * index + index++);
} else {
throw new NoSuchElementException();
}
}
Answered by Alexandr on November 25, 2021
if (this.hasNext()) {
PVTPoint result = pointList.get(index);
index += speed;
return result;
} else {
Answered by Igor on November 25, 2021
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP