Я пытаюсь использовать итератор, который реализует Iterator. Итератор должен пройти хэш-таблицу. Когда я пытаюсь распечатать элементы в хэш-таблице, я получаю бесконечный цикл где-то, и один и тот же элемент продолжает печататься до тех пор, пока я не закончу программу. Это мой код для моего hasNext и следующих методов (курсор отслеживает следующей активной ячейки в хэш-таблице, как таблица не будет заполнена в порядке, а активный означает, что ячейка в настоящее время занята):Iterator Infinite Loop - hasNext() и Next()
public boolean hasNext()
{
boolean entry = false;
//nextLoop:
while(entry == false && cursor < table.length)
{
if(table[cursor] == null)
{
cursor++;
}
else
{
if(table[cursor].active == false)
{
cursor++;
}
else
{
entry = true;
//break nextLoop;
}
}
}
boolean entryStatus = (table[cursor] != null); // check to see if entry at cursor is null
boolean activeStatus = table[cursor].active; // check to see if the cell is active (there is something inside the cell)
return (entryStatus && activeStatus);
}
public Object next()
{
boolean entry = false;
if(cursor >= table.length)
{
throw new NoSuchElementException(); //check - myexceptioN?
}
else
{
while(cursor < table.length && entry == false)
{
if(table[cursor] != null)
{
if(table[cursor].active == true)
{
entry = true;
}
else
{
cursor++;
}
}
else if(table[cursor] == null)
{
cursor++;
}
}
}
return table[cursor].element;
}
Вы пробовали пройти через отладчик? Какие линии никогда не достигаются? – Brandon
Как правило, при реализации итератора вы сохраняете «указатель» на то, где находитесь в вашей коллекции (кажется, что «курсор» в вашем случае). 'hasNext()' должен просто вернуть, будет ли следующая позиция из вашего текущего указателя содержать достоверные данные и возвращать 'true/false'. Кажется, вы пересматриваете позицию курсора каждый раз, когда вы его вызываете, что довольно неэффективно. Когда вы вызываете 'next()', он должен фактически возвращать следующий элемент и увеличивать указатель. Эти два метода должны работать рука об руку, чтобы обеспечить функциональность итератора. –
Почему вы не используете какую-либо реализацию java.util.map? –