#java
Вопрос:
Я думаю, что это должна быть легкая проблема, но я просто не могу ее решить. На самом деле,я изучаю стек с итерацией, когда я пытался реализовать интерфейс Iterable, IDE постоянно предупреждала меня о том, что я не реализовал метод hasNext()
Вот мой код:
import java.util.Iterator;
public class ResizingArrayStack<Item> implements Iterator<Item>
{
private Item[] array = (Item[]) new Object[1]; //stores the elements
private int size = 0; //number of the elements
/*
Codes that doesn't matter
*/
//implement iterator()
public Iterator<Item> iterator()
{
return new ReverseArrayIterator();
}
private class ReverseArrayIterator implements Iterator<Item>
{
private int i = size();
//I ALREADY IMPLEMENTED IT!
@Override
public boolean hasNext()
{
return i > 0;
}
@Override
public Item next()
{
return a[--i];
}
}
}
И вот что показывает IDE:
Класс «ResizingArrayStack» должен быть либо объявлен абстрактным, либо реализовать абстрактный метод «hasNext ()» в «Итераторе»
Я буду очень признателен, если вы, ребята, сможете ответить на этот вопрос за меня!
Комментарии:
1. Сообщение понятно само по себе, у класса
ResizingArrayStack
нетnext()
метода, только у вашего внутреннегоReverseArrayIterator
класса он есть.2. Обратите внимание , что IDE жалуется не
ResizingArrayIterator
на , а на тоResizingArrayStack
, чтоIterator
в вашем фрагменте нет методов. Вы имели в виду вместо этого реализоватьIterable
во внешнем классе стека?3. Я понимаю, что вы пытаетесь мне показать, но я хочу сделать код более кратким. Я читаю коды отсюда: geeksforgeeks.org/… И обнаружил, что он может поместить методы в класс
Ответ №1:
То, что я написал во внутреннем классе, было правильным, проблема в том, что я должен был быть более строгим при определении класса ResizingArrayStack
. Он должен реализовываться Iterable
вместо Iterator