0

新しいオブジェクトを作成すると、プログラムは正常に動作しています:

Iterator iter = Students.iterator();
    while (iter.hasNext()){
        Student newstudent=(Student) iter.next();
        if (newstudent.getCourse()==2){
            System.out.println(  newstudent.getName());}

しかし、したくない場合:

Iterator iter = Students.iterator();
  while (iter.hasNext()){
   if (((Student) iter.next()).getCourse()==2){
     System.out.println(( (Student)iter.next()).getName());}//Here it is printing out the next object afther that I have checked

同じオブジェクトにとどまる方法は?

4

7 に答える 7

1

現在の学生を一時的に保存します。

Iterator iter = Students.iterator();
while (iter.hasNext()){
  Student currentStudent = (Student) iter.next()
  if (currentStudent.getCourse()==2) {
    System.out.println(currentStudent.getName());
  } //Here it is printing
}
于 2013-08-14T10:03:56.727 に答える
0
   if (((Student) iter.next()).getCourse()==2){ //first time next happened
         System.out.println(( (Student)iter.next()).getName());}/  after condition next happened again

つまり、 (N.next)で条件を確認しN 、値を出力しています。N+1

最初のアプローチであなたがしていることは正しいものです。

于 2013-08-14T10:06:32.790 に答える
0

イテレータの現在のインデックスを呼び出すたびにiter.next()、前進しています。Studentしたがって、現在のオブジェクトを一時オブジェクトに保存する必要があります。
最初は
-|
[-][-][-][-]
iter.next()
---|
[-][-][-][-]

iter.next()ここから twiseを呼び出すと
------|
[-][-][-][-]


各 [-] は学生オブジェクトであると考えてください

于 2013-08-14T10:04:23.973 に答える
0

イテレータを進めたくない場合は、常に を使用することを検討PeekingIteratorできます。これにより、peek削除せずに次の要素に移動できます。たとえば、次のようになります。

final Iterator<Student> iter = Iterators.peekingIterator(Students.iterator());

final Student a = iter.peek();
final Student b = iter.peek();
final Student c = iter.next();

assert a == b == c;

Google の Guava ライブラリPeekingIteratorに含まれていますが、自分で作成するのは簡単です。

于 2013-08-14T10:45:13.500 に答える
0

プログラムで iter.next() を 2 回呼び出しています。したがって、エラー!

于 2013-08-14T10:10:34.857 に答える
0

next()メソッドを一度だけ 呼び出す必要があります

 while (iter.hasNext()){
 Student student =  (Student) iter.next();
  if (student.getCourse()==2){
     System.out.println(( student.getName());
}
于 2013-08-14T10:04:51.813 に答える