Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Java программирование Срочно

Никита Смирнов Знаток (320), на голосовании 1 год назад
Программист Василий осваивает итераторы. Он наследовал класс A от класса ArrayList и хочет написать свой итератор, который будет перебирать элементы в обратном порядке.

Чтобы, например, код

A arr = new A();
arr.add(2); arr.add(1); arr.add(3);
for (Integer k : arr) {
System.out.println(k);
}
выдал 3 1 2

Василий написал сам класс, но не может написать класс итератора. Помогите ему!

class A extends ArrayList<Integer> {
// YOUR CODE will be placed HERE
// ...
public Iterator<Integer> iterator() {
return new Iter();
}
}

В качестве ответа сдайте только класс итератора.
Голосование за лучший ответ
Серёжа Болобан Ученик (160) 1 год назад
java
Copy code
class ReverseIterator implements Iterator<Integer> {
private ArrayList<Integer> list;
private int index;

public ReverseIterator(ArrayList<Integer> list) {
this.list = list;
this.index = list.size() - 1;
}

public boolean hasNext() {
return index >= 0;
}

public Integer next() {
Integer result = list.get(index);
index--;
return result;
}

public void remove() {
throw new UnsupportedOperationException();
}
}
Чтобы использовать этот итератор, вставьте следующий код внутрь класса A:

java
Copy code
private class ReverseIterable implements Iterable<Integer> {
public Iterator<Integer> iterator() {
return new ReverseIterator(A.this);
}
}

public Iterable<Integer> reverse() {
return new ReverseIterable();
}
Этот код добавляет метод reverse(), который возвращает объект Iterable, созданный из класса ReverseIterable, который в свою очередь возвращает объект ReverseIterator.

Теперь вы можете использовать итератор в обратном порядке, например, так:

java
Copy code
A arr = new A();
arr.add(2); arr.add(1); arr.add(3);
for (Integer k : arr.reverse()) {
System.out.println(k);
}
Это должно вывести на экран:

Copy code
3
1
2
Похожие вопросы