titolo curioso no?
beh, il mio problema č proprio questo
io ho creato una struttura dati (coda circolare) per rappresentare i dati di un grafico
ma il mio problema viene prima del grafico
ho creato una classe di prova per testare la mia struttura e ho scoperto che se nel ciclo di inserimento dei dati nella coda accedo ad essa (usando l'iteratore)
alla fine del ciclo i metodi che invoco non danno i risultati corretti
neanche quelli interni al ciclo
posto le classi
aiutatemi, non riesco ad uscirne
file CodaCircolare.java
codice della struttura dati (funziona)
l'iteratorecodice:public class CodaCircolare{ class Nodo{ Object info; Nodo next; Nodo(Object a, Nodo n) {info=a; next=n;} Nodo(Object a) {info=a; next=null;} } protected Nodo first,last; protected int dimensionemax; CodaCircolare(int k){ first=last=null; dimensionemax=k+1; } public int count(){ int result; if(first==null) result=0; else { result=1; Nodo temp = first; while (temp != last) { result++; temp=temp.next; } } return result; } public Object front() throws EmptyQueueException{ if (isEmpty()) { throw new EmptyQueueException("impossibile fornire primo elemento"); } else { return first.info; } } public boolean isEmpty(){ return first == null; } public boolean isFull(){ return count() >= dimensionemax; } public void remove() throws EmptyQueueException{ if (isEmpty()) { throw new EmptyQueueException("impossibile rimuovere dalla coda"); } else { first=first.next; } } public void add(Object a){ if (isEmpty()) { first=new Nodo(a); last=first; } else { last.next=new Nodo(a); last=last.next; if (isFull()) first=first.next; } } IteratoreCodaCircolare iterator() { return new IteratoreCodaCircolare(this); } } class EmptyQueueException extends Exception{ EmptyQueueException(String s){ super(s); } }
file IteratoreCodaCircolare.java
classe di provacodice:import java.util.Enumeration; class IteratoreCodaCircolare implements Enumeration { CodaCircolare c; IteratoreCodaCircolare(CodaCircolare l) { c=l; } public boolean hasMoreElements() { return !c.isEmpty(); } public Object nextElement() { Object result = null; try { result = c.front(); c.remove(); } catch(EmptyQueueException ee) {} return result; } }
file: ProvaCodaCircolare.java
provate voi stessicodice:import java.util.Enumeration; class ProvaCodaCircolare { public static void main(String[] args) { Enumeration it; CodaCircolare c = new CodaCircolare(6); for (int i=0; i<20;i++) { c.add(new Integer(i)); // System.out.println("count: "+c.count()); // it = c.iterator(); // while(it.hasMoreElements()) System.out.print(it.nextElement()+" "); // System.out.print("\n"); } System.out.print("\n-------------\n"); System.out.println("count: "+c.count()); it = c.iterator(); while(it.hasMoreElements()) System.out.print(it.nextElement()+" "); } }
lasciando i commenti tutto funziona bene
se li togliete non funziona come dovrebbe
grazie



Rispondi quotando