2015-07-02 5 views
0

Дано IntegerIterator (который реализует hasNext, затем, удалить), реализовать PositiveIterator, который имеет hasNext, рядом, удалитьположительный дизайн Итератор получает целое число итератора

Может кто-нибудь дать некоторые идеи для этой задачи ? Это не домашнее задание!

Например:

int[] a = new int[]{1,-2,-3,4,5,-6,7,-8,9}; 
IntegerIterator it = new IntegerIterator(a); 
PositiveIterator iter = new PositiveIterator(it); 
Console.WriteLine(iter.HasNext()); //true 
Console.WriteLine(iter.HasNext()); //true 
Console.WriteLine(iter.HasNext()); //true 
Console.WriteLine(iter.Next()); //1 
Console.WriteLine(iter.Next()); //4 
Console.WriteLine(iter.Next()); //5 

ответ

1

PositiveIterator.Next не должно быть проблемой. Просто позвоните Iterator.Next, пока значение не будет положительным. PositiveIterator.Remove просто нужен звонок Iterator.Remove. PositiveIterator.HasNext - причина, по которой код будет немного уродливым, поскольку данные методы допускают только однонаправленную итерацию.

class PositiveIterator: 
    int next = -1 //holds the next value to return 
    IntegerIterator iter //the integeriterator wrapped by this object 

    PositiveIterator(IntegerIterator it) 
     iter = it 

     //search for the first positive value for next 
     while iter.HasNext() AND ((next = iter.Next()) < 1) 
      NOOP 

    HasNext() 
     return next != -1 

    Next() 
     //the current value to return 
     int tmp = next 

     //search for the next positive value 
     while iter.HasNext() AND ((next = iter.Next()) < 1) 
      NOOP 

     if NOT iter.HasNext() 
      next = -1 //no next positive value available 

     return tmp 

    Remove() 
     if next == -1 
      return 

     iter.Remove() 

     //update the next value 
     next = Next() 

В основном PositiveInteger нужно предсказать значение для значения, которое будет возвращено в следующем.

0

Это довольно прямо вперед - переопределить конструктор, HashNext() и Next() методы, такие, вы всегда будете иметь «в руке» следующий положительное значение, в то время как пропуская все отрицательные значения.

Псевдо код:

class PositiveIterator: 
    private int next = -1; 
    private final Integer i; 
    PositiveIterator(Itertor i): 
      while (i.HashNext() && (next = i.Next()) <= 0) ; 
      //at this point next holds the next positive element, if such exists 
      this.i = i; 
    boolean HasNext(): 
     return (next > 0) 
    int Next(): 
     int tempVal = -1; 
     while (i.HashNext() && (tempVal = i.Next()) <= 0) ; 
     int res = next; 
     next = tempVal; 
     return next; 

Обратите внимание, что в любой момент, в любом методе - next > 0 тогда и только тогда, когда есть некоторый положительный элемент в массиве остался, и он будет держать следующий элемент, который нужно т производить ,

Смежные вопросы