2017-09-13 11 views
2

にエラーがスローされます私は、removeメソッドを使用しようとしていますが、私はこのためにエラーを取得しておくように私は台無しになっています:removeメソッドは、Listインタフェースのイテレータ

List<String> list1 = new ArrayList<String>(); 
     list1.add("Apple"); 
     list1.add("Bus"); 
     list1.add("Cat"); 
     list1.add("Dog"); 
     String ne = list1.listIterator().next(); 
System.out.println(ne); 
list1.listIterator().remove(); 

削除文がエラーをスロー?誰も私になぜ言うことができますか? listIteratorの代わりにイテレータを使用するだけで同じことができますか?

+0

問題は、あなたが 'list1.listIterator()'秒の時間を行うときに、新しい反復子オブジェクトを取得しているということです。 '.remove()'は '.next()'や '.previous()'の呼び出しの後でしか動作しません。変数に代入することで、最初の 'ListIterator'を再利用してください。 – kaza

答えて

3

next()が呼び出されるたびにListIterator#remove()に電話をかけることができます(Javadocを参照)。しかし、あなたのコードでは、実際には新しいイテレータの前に使用したイテレータではなく、remove()を呼び出しています。次のコードを試してみて、うまくいけば、あなたが間違って何をしたかは明らかであろう。

List<String> list1 = new ArrayList<String>(); 
list1.add("Apple"); 
list1.add("Bus"); 
list1.add("Cat"); 
list1.add("Dog"); 
// retain a reference to the same list iterator 
ListIterator<String> list1itr = list1.listIterator(); 
String ne = list1itr.next(); 
System.out.println(ne); 
list1itr.remove(); 

Demo

+0

これを試しましたが、今はlistIteratorのシンボルを見つけることができず、ちょうど私もそれをインポートしたことを確かめています!! – user7703770

+0

@ user7703770私はそれがすでに利用可能であるべきだと思います。そうでなければ、 'ListIterator'は' java.util'パッケージの一部です。 –

+0

なぜ私は混乱しているのですか? ava:12:エラー:シンボルが見つかりません ListIterator list1itr = list1.listIterator(); 私たちは初めて新しいものを使用する必要がありますか? – user7703770

関連する問題