Ver Mensaje Individual
  #1 (permalink)  
Antiguo 07/04/2014, 16:13
dilan_snoopy
 
Fecha de Ingreso: septiembre-2013
Mensajes: 57
Antigüedad: 10 años, 7 meses
Puntos: 0
Iterator con saltos

Saludos a la comunidad

bueno lo que sucede es que debo implementar un iterator por saltos en una lista Circula Doblemente enlazada, ya tengo una implementacion pero me dicen que asi no lo haga
ejemplo: si el numero de saltos es 2 entonces se visitaran los nodos en los indices
0,2,4,6,8..... si fuera 3 entonces 0,3,6,9........ y asi sucesivamente

Código:
package ufps.util;
import java.util.Iterator;
/**
 * Clase para el manejo de Iteradores en una Lista Circular Doble Enlazada<T> con nodo cabecera
 * @author Marco Adarme
 * @version 2.0
 */
public class IteratorSaltos<T> implements Iterator<T>
{
	
	private NodoD<T> cab, posicion;
        private int num=0;
	
        /**
         * Constructor con parametros de la clase
         * @param cab es de tipo Nodo<T> que contiene el nodo cabeza de la lista
         */
	IteratorSaltos(NodoD<T> cab,int num) {
            this.cab=cab;
            this.posicion=this.cab.getSig();
            this.num=num;
            
	}
        
        /**
         * remueve un dato de la lista
         */
        @Override
        public void remove()
        {}
	
        /**
         * Método que informa si existe otro elemento en la lista para seguir iterando
         * @return un tipo boolean que informa si existe o no un dato en la lista, desde la posición 
         * actual del cursor.
         */
        @Override
	public boolean hasNext() {
            
		return (this.posicion!=this.cab);
                
	}
	
        /**
         * Método que retorna un dato de la posición actual del cursor del iterador.
         * El cursor queda en la siguiente posición.
         * @return un tipo T que contiene el dato actual
         */
        @Override
	public T next()
     {
         T dato = null;
	 if (this.hasNext()) {
             int con = 0;
             NodoD<T> aux = this.posicion;
            for (; aux != this.cab; aux = aux.getSig()) {
                 if (con == this.num) {
                     break;
                 }
                 con++;
             }
           if (aux != this.cab)
            {
                 dato = this.posicion.getInfo();
                 this.posicion = aux;
                 if(this.posicion.getSig()==this.cab)
                 {
                       this.posicion=this.cab;
                 }
                 return dato;
             }
	     throw new RuntimeException("No alcanzan los nodos para dar el salto   ");			 	
	}	
	throw new RuntimeException("No hay mas elementos ");		
     }	 	
//fin de la clase
}
Me dicen que debo cambiar ciclo y quitar break y la excepcion

Código:
for (; aux != this.cab; aux = aux.getSig()) {
                 if (con == this.num) {
                     break;
                 }
                 con++;
             }

quitar esta excepcion:
throw new RuntimeException("No alcanzan los nodos para dar el salto ");	
}
alguien me podria explicar otra forma de hacerlo :s