Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [java] niente altro nel ciclo

    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
    Alessandro, l'unico pinguino con le scarpe da ginnastica

    PhpItalia.net - il portale definitivo sul PHP

  2. #2
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    stai provando a riempire mentre svuoti la lista
    il problema č in IteratoreCodaCircolare dove si deve creare un riferimento diverso
    IteratoreCodaCircolare(CodaCircolare l) {
    c = l.clone();
    }

  3. #3
    grazie per l'info

    ma
    ./IteratoreCodaCircolare.java:8: clone() has protected access in java.lang.Object
    c=l.clone();
    ^
    ./IteratoreCodaCircolare.java:8: incompatible types
    found : java.lang.Object
    required: CodaCircolare
    c=l.clone();
    ^
    2 errors

    Procedura completata con codice di uscita 1
    Alessandro, l'unico pinguino con le scarpe da ginnastica

    PhpItalia.net - il portale definitivo sul PHP

  4. #4
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    vero va implementato
    puoi mettere il metodo clone() in CodaCircolare che faccia una copia dell'oggetto oppure aggiungere un metodo protected Object get(int i) che restituisca l'Object i senza svuotare la coda

  5. #5
    si ho capito
    il problema che ho č che ho la classe Nodo all'interno di CodaCircolare quindi non posso accedervi direttamente...
    mi basterā portarla fuori
    Alessandro, l'unico pinguino con le scarpe da ginnastica

    PhpItalia.net - il portale definitivo sul PHP

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.