Salve ragazzi,
sto progettando un dato astratto coda. su questo dato coda dovrei applicare un iteratore che permette di scandire la coda dall'inizio alla fine.
il problema è che l'iteratore non finisce mai va in loop infinito.
codice:
public class CodaCollegataT<T> implements CodaP<T> {
private Record<T> inizio = null;
private Record<T> fine =null;
public void enqueue(T e) {
if(isEmpty()){
inizio = new Record<T>(e);
fine = inizio;
}
else
{
fine.next = new Record<T>(e, fine);
fine = fine.next;
}
}
public boolean isEmpty() {
return inizio == null;
}
public Iterator<T> iterator() {
return new CodaIteratore(inizio);
}
public static void main(String[] args)
{
CodaP<String> codap = new CodaCollegataT<String>();
codap.enqueue("Ciccio spugna");
codap.enqueue("MarlonBrandon");
codap.enqueue("Brandon");
codap.enqueue("Marlon");
Iterator it = codap.iterator();
while(it.hasNext())
{
System.out.println(it.next());
}
}
}
interfaccia CodaP
codice:
package CodaP;
public interface CodaP<T> extends Iterable<T> {
public boolean isEmpty();
public void enqueue(T e);
}
iteratore
codice:
package CodaP;
import java.util.Iterator;
public class CodaIteratore<T> implements Iterator<T>{
// CodaCollegataT<T> p;
Record<T> inizio;
// Record<T> fine;
CodaIteratore(/*CodaCollegataT<T>*/Record<T> p)
{
this.inizio=p;
// inizio = fine = null;
}
@Override
public boolean hasNext() {
// TODO Auto-generated method stub
if(inizio.next==null)
return false;
return true;
}
@Override
public T next() {
// TODO Auto-generated method stub
if(hasNext()){
Record<T> temp = inizio;
inizio = inizio.next;
return (T)temp.elem;
}
return null;
}
@Override
public void remove() {
// TODO Auto-generated method stub
}
}
quello che io ottengo è questo:
Ciccio spugna
MarlonBrandon
Brandon
Marlon
Brandon
Marlon
Brandon
Marlon
praticamente all'iizio va bene poi mi stampa sempre gli ultimi due elementi
come mai?????