2013-11-11 4 views
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"); 
    } 

Но я изо всех сил, чтобы сделать это с предыдущим словом, потому что итератор не имеет никакого предыдущего метода. Любые идеи о том, как заставить это работать, будут очень оценены

+1

Является ли это домашнее задание? Если да, разве вы не должны делать это сами, чтобы учиться? –

+1

Использование ** ListIterator ** –

ответ

1

Используйте ListIterator. ListIterator может выполнять итерацию в обоих направлениях.

3

попробуйте ListIterator вместо Iterator. ListIterator имеет метод previous() для доступа к предыдущему элементу в списке.

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

Вы можете использовать ListIterator или сохранить предыдущий элемент в переменной внутри вашего цикла.

Еще одна проблема - вызов it.next() дважды небезопасен, поскольку вы только проверяете it.hasNext() один раз.

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. 
    } 
+0

Это должно быть «Next:» + c.toString()); –

Смежные вопросы