0

这个想法是我有一个单词列表,用户在列表中搜索一个单词,然后根据单词是什么,您可以打印出后面的单词或前面的单词。使用以下单词很简单,如下所示:

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

4 回答 4

3

尝试ListIterator而不是Iterator. ListIterator具有previous()方法来访问列表中的前一个元素。

ListIterator<Phrase> iterator = phrases.listIterator();
Phrase p = iterator.previous();
于 2013-11-11T13:00:21.043 回答
1

使用ListIterator。ListIterator 能够双向迭代。

于 2013-11-11T13:00:06.287 回答
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.
    }
于 2013-11-11T13:10:12.147 回答
0

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

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

于 2013-11-11T13:03:21.783 回答