使用迭代器访问前一个元素

时间:2013-11-11 12:58:17

标签: java arraylist iterator

我的想法是,我有一个单词列表,用户在列表中搜索单词,然后根据单词的内容打印下面的单词或前面的单词。使用下面的单词就可以很简单:

public void pirateToEnglish(){
        System.out.println("Enter the word that you want to translate ");
        String nameSearch;
        nameSearch=input.nextLine();

        Iterator<Phrase> it = phrases.iterator();
        while(it.hasNext())
        {
            Phrase c = it.next();
            if (c.getName().equals(nameSearch))  {
                System.out.println( it.next().toString());      
                return;
            }
        }

        System.out.println("not on list");
    }

但是我正在努力用前面的单词做这个,因为迭代器没有以前的方法。关于如何使其发挥作用的任何想法都将非常感激

4 个答案:

答案 0 :(得分:3)

尝试ListIterator而不是IteratorListIterator使用previous()方法访问列表中的上一个元素。

ListIterator<Phrase> iterator = phrases.listIterator();
Phrase p = iterator.previous();

答案 1 :(得分:1)

使用ListIterator。 ListIterator能够在两个方向上进行迭代。

答案 2 :(得分:0)

您可以使用ListIterator或将上一项保存在循环内的变量中。

另一个问题 - 两次调用it.next()是不安全的,因为您只检查it.hasNext()一次。

答案 3 :(得分:0)

您可以将前一个元素存储在如下字符串中:

 String previous = "";
 while(it.hasNext())
    {
        Phrase c = it.next();
        if (c.getName().equals(nameSearch))  {
            System.out.println( "Previous : " + previous); 
            System.out.println( "Next : " + it.next().toString());      
            return;
        }
        previous = c.getName(); //Convert current element to String or c.getName() whichever is applicable.
    }