2015-09-16 1 views
3

Вот мой внутренний класс, который реализует Iterator:Реализация Java итератора и Iterable интерфейс над Object [] массив

public class myIterator implements Iterator<Object> { 
    private int pos = 0; 

    public boolean hasNext(){ 
     return pos < arrayPal.length; 

    } 
    public Object next(){ 
     return arrayPal[pos++]; 

    } 
} 

В классе, что этот внутренний класс находится в пределах, DynArray, (который является объектом, имеет внутренний массив с именем arrayPal любого типа объекта, а также логическое значение, которое говорит, может ли массив хранить нулевые значения) Я хочу использовать итератор для моего метода добавления

public void add(T ele) { 

    int counter =0; 
    int tempIndex =0; 
    if(ele == null && this.allowed == false){ 
     throw new NullPointerException("This array does not accept null values!"); 
    } 

    else{ 
     myIterator iterator = new myIterator(); 
     Iterator<T> it = this.iterator(); 


     for(Object o: this.arrayPal){ 
      System.out.print(it.hasNext()); 
      if(it.hasNext() == false && (this.arrayPal.length-1) > counter){ 
       arrayPal[counter+1] = ele; 
      } 
      else if (it.hasNext() == false && (arrayPal.length-1) == counter){ 
       //expand the array by quanta 
       //add the the first newest index 
       Object[] temp = new Object[this.arrayPal.length + quanta]; 

       for(Object b: this.arrayPal){ 
        temp[tempIndex++] = b; 
       } 
       temp[this.arrayPal.length] = ele; 
       this.arrayPal = temp; 

      } 
     counter++; 
     } 
} 

Однако. hasNext() возвращает true даже для последнего элемента в моем списке. Почему это?

Кроме того, он не позволит мне делать this.arrayPal.iterator() он говорит:

не может вызывать итератор() на тип массива Object []

Почему нет?

+0

Непонятно, как итератор должен быть связан с методом добавления. Кроме того, вы не можете добавлять методы в Java к типам, которые вы не контролируете, включая 'Object []'. Вы можете добавлять только методы, например. классы, такие как 'DynArray', которые вы пишете. –

+0

Вы никогда не называете 'it.next()' - это намеренно? –

+0

Когда я его назвал.next()? это заставляет итератор делать шаг? – Jenny

ответ

2

Ваш метод add получает новый Итератор и вызывает несколько раз it.hasNext(). Он никогда не вызывает it.next(), поэтому Iterator продолжает указывать на первый элемент массива, а hasNext() никогда не вернет false (предполагая, что массив не пуст).