2013-04-21 72 views
1

为什么我的hasPrevious迭代器不能正常工作,我不明白,它看起来像这样:hasPrevious()方法不工作

public void previousSong(){ 
    Iterator<Song> iterator = songs.iterator(); 
if(iterator.hasPrevious()) { 
     System.out.println(iterator.previous().toString()); 
} 
} 

我有使用hasNext(函数)和它的作品,但是这一次会不。

public void nextSong(){ 
    Iterator<Song> iterator = songs.iterator(); 
if(iterator.hasNext()) { 
     System.out.println(iterator.next().toString()); 
} 
} 

我不确定这个方法不存在或不存在,但是当我研究它时,Java网站会说到它。我不明白它为什么不起作用。

+1

“不工作”是一个足够的问题描述。通过“不工作”,你的意思是“这段代码不能编译?” [Iterator接口]中没有'hasPrevious()'方法(http://docs.oracle.com/javase/7/docs/api/java/util/Iterator.html)。什么“Java网站谈论它?” – 2013-04-21 17:01:05

+0

它不会编译,因为它不存在,我想这是网站http://docs.oracle.com/javase/1.5.0/docs/api/java/util/ListIterator.html。 @MattBall – 2013-04-21 17:03:39

回答

3

hasPreviousprevious方法仅适用于ListIterators(http://docs.oracle.com/javase/1.5.0/docs/api/java/util/ListIterator.html),Iterator的子接口定义。由于您只使用迭代器,因此唯一定义的方法是hasNext()nextremove - 请参阅:http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Iterator.html

+0

谢谢,我真的很困惑,为什么它不工作,我不知道有两个单独的迭代器。 – 2013-04-21 17:21:26

0

只有ListIterator可以向后走。正常Iterator类不能。

所以如果你使用的ListIterator代替Iterator将工作:)

+0

谢谢,我不知道他们是不同的,并且存在两个。 – 2013-04-21 17:21:52

0

它应该是这样的:

 public void previousSong(){ 
     ListIterator<Song> it = songs.listIterator(); 
    while(it.hasNext()) { 
      System.out.println(it.next().toString()); 
    } 

    // and now you can use hasprevious() 

     while(it.hasPrevious()) { 
      System.out.println(it.previous().toString()); 
    } 
} 
0
// Create an array list 

ArrayList list = new ArrayList(); 

    // add elements to the array list 
     list.add("C++"); 
     list.add("Java"); 
     list.add("Php"); 
     list.add("Python"); 
     list.add("Ruby"); 
     list.add("Perl"); 

    //Create the object of ListIterator through listIterator() method 
     ListIterator object=list.listIterator(); 
    // Modify the list element 
     while(object.hasNext()) { 
      String language=(String) object.next() ; 
      object.set(language+"+"); 
     } 
    // Show element in pervious order 
     while(object.hasPrevious()) { 
      System.out.println(object.previous()); 
     } 

应该由正向先实施再反方向工作。