2017-03-27 2 views
0

なぜ、場所()で異なる値が返されるのだろうと思います。コンストラクタでは、それは意味をなさない私3を返します。しかし、2番目()では0を返します。私は両方の場所が0を返すはずだと思いました。コンストラクタとjavaのメソッドで異なる値を返す

あなたの属性コンストラクタのパラメータの値を割り当てる必要があり
import java.util.ArrayList; 
import java.util.Iterator; 
import java.util.List; 

public class Vector2D implements Iterator<Integer> { 
    private List<List<Integer>> vec2d; 
    private Iterator<Integer> it; 
    private int counter = 0; 
    private int size; 
    public Vector2D(List<List<Integer>> vec2d) { 
     this.vec2d = new ArrayList<List<Integer>>(); 
     if(vec2d.size() == 0) { 
      this.it = null; 
     } else { 
      this.size = vec2d.size(); 
      System.out.println("this size is " + size); // * returns 3 
      this.it = vec2d.get(0).iterator(); 
     } 
    } 

    @Override 
    public Integer next() { 
     System.out.println("what happens here? " + vec2d.size()); **// * why it returns 0?? should it return 3??** 
     if(hasNext()) { 
      return it.next(); 
     } 
     return -1; 
    } 

    @Override 
    public boolean hasNext() { 
     if(it == null) { 
      return false; 
     } 
     while(counter < size) { 
      if(it.hasNext()) { 
       return true; 
      } 
      counter++; 
      if(counter >= size) { 
       return false; 
      } 
      System.out.println("counter is " + counter + " size is " + vec2d.size()); 
      List<Integer> l = vec2d.get(counter); 
      it = l.iterator(); 
     } 
     return false; 
    } 

    public static void main(String[] args) { 
     List<Integer> list = new ArrayList<Integer>(); 
     List<Integer> list2 = new ArrayList<Integer>(); 
     List<Integer> list3 = new ArrayList<Integer>(); 
     list.add(1); 
     list.add(2); 
     list2.add(3); 
     list3.add(4); 
     list3.add(5); 
     list3.add(6); 
     List<List<Integer>> lists = new ArrayList<List<Integer>>(); 
     lists.add(list); 
     lists.add(list2); 
     lists.add(list3); 

     Vector2D vec = new Vector2D(lists); 
     System.out.println(vec.next()); 

    } 
} 
+0

ここで、place()はどこにあり、コード内のsecond()はどこにあるのでしょうか? –

答えて

3

そうでない場合、あなたの属性vec2dでパラメータvec2dないで作業している:

public Vector2D(List<List<Integer>> vec2d) { 
    this.vec2d = vec2d;//assign Parameter to list 
    if(this.vec2d.size() == 0) { 
     this.it = null; 
    } else { 
     this.size = this.vec2d.size(); 
     System.out.println("this size is " + size); // * returns 3 
     this.it = this.vec2d.get(0).iterator(); 
    } 
} 

だけで何かにList<List<Integer>> vec2dメソッドのparamの名前を変更してみてくださいそうでなければ、あなたが見るでしょう。

関連する問題