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)
codice:
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);
}
}
l'iteratore
file IteratoreCodaCircolare.java
codice:
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;
}
}
classe di prova
file: ProvaCodaCircolare.java
codice:
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()+" ");
}
}
provate voi stessi
lasciando i commenti tutto funziona bene
se li togliete non funziona come dovrebbe
grazie