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

    Inserimento in Array Circolare FIFO

    Ciao a tutti.
    Dovrei realizzare la seguente cose utilizzando un array circolare FIFO di dimenzione 3 .

    per realizzarlo ho attinto alla classe utilizzata in questo post

    http://forum.html.it/forum/showthrea...rray+circolare

    codice:
    public class FIFO
    {
    private String array[];
    private int in; //prossima posizione in ingresso
    private int out; //prossima posizione in uscita
    private int count; //contatore posizioni piene
    private final int DIM; //dimensione array
    
    public FIFO(int dimensione)
    {
    DIM = dimensione;
    in=0;
    out=0;
    count=0;
    array = new String[DIM]; //crea l'array
    }
    
    
    public boolean insert(String s)
    {
    if(count==DIM) //se la coda è piena
    return false;
    
    array[in] = new String(s); //inserisce la stringa in posizione in
    
    count++; //incrementa il contatore di elementi
    in = (in+1)%DIM; //incrementa la posizione di ingresso in modo circolare
    
    return true;
    }
    
    public String extract() //restituisce un elemento, cancellandolo dalla coda
    {
    
    if(count==0) //se la coda è vuota
    return null;
    
    String risp = new String(array[out]);
    
    count--;
    out = (out+1)%DIM;
    
    return risp;
    }
    
    public String toString() //restituisce la successione di elementi senza estrarli dall'array
    {
    if(count==0)
    {
    System.out.println("La CODA e' vuota!");
    return null;
    }
    
    String risp = "";
    int pos;
    
    for(int i=0; i<count; i++)
    {
    pos = (out+i)%DIM;
    risp = new String(risp+array[pos]);
    }
    
    //se è necessario svuotare l'array basta togliere il commento dal codice
    /*
    in=0;
    out=0;
    count=0;
    */
    
    return risp;
    }
    }
    Quello che voglio fare è la seguente:
    IL Programma mi chiede se voglio inserire una lettrera > Se > la lettera è presente nell'array, manda un msg, ALTRIMENTI> La inserisce in cima all'array.


    il file che cerca di realizzare ciò è
    codice:
    import PackageFIFO.*;
    import java.io.*;
    import prog.io.*;
    
    public class ProvaFiFO {
    
       public static void main(String[] args) {
       	
       	ConsoleInputManager in= new ConsoleInputManager();
       	ConsoleInputManager inserisci= new ConsoleInputManager();
       	ConsoleOutputManager out= new ConsoleOutputManager();
       	
       	
      
       	FIFO a= new FIFO(3);
       	while (in.readSiNo("Inserisci altre lettere: ")){ //chiedo se si vogliono inserire altre lettere
       	
       	String InserisciLettera= inserisci.readLine("Inserisci LA LETTERA :   ");
       	
       		for (int k=0; k<a.length; k++){              //scandisco l'array per vedere se esiste la lettera
       			if(a[k]==InserisciLettera)
       				System.out.println("lettera esistente");
       			else
       	             a.insert(InserisciLettera);
       	             
       	                                  }
       	 }
       	
       	
        }
        
        
    }
    l'errore che mi da è il seguente:
    codice:
    --------------------Configuration: <Default>--------------------
    C:\Documents and Settings\All Users\Documenti\Programmazione\java\ProvaFiFO.java:28: cannot find symbol
    symbol  : variable length
    location: class FIFO
            for (int k=0; k<a.length; k++){              //scandisco l'array per vedere se esiste la lettera
                             ^
    C:\Documents and Settings\All Users\Documenti\Programmazione\java\ProvaFiFO.java:29: array required, but FIFO found
                if(a[k]==InserisciLettera)
                    ^
    2 errors
    
    Process completed.
    Come posso sistemarlo?
    Grazie

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254

    Re: Inserimento in Array Circolare FIFO

    Originariamente inviato da 19pantarei75
    codice:
    cannot find symbol
    symbol  : variable length
    location: class FIFO
            for (int k=0; k<a.length; k++){              //scandisco l'array per vedere se esiste la lettera
    Di quale array parli? Del String array[] in FIFO? Quello è "private", non è visibile direttamente dall'esterno.

    Inoltre InserisciLettera è un String e lo stai comparando con == che è sbagliato.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  3. #3
    si parlo praticamente dell'array nella classe. vorrei scandirlo per vedere se contiene l'elemento che dovrò inserire.
    Come posso modificarlo a questo punto, per fare ciò?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Originariamente inviato da 19pantarei75
    si parlo praticamente dell'array nella classe. vorrei scandirlo per vedere se contiene l'elemento che dovrò inserire.
    Come posso modificarlo a questo punto, per fare ciò?
    Quella classe FIFO non permette l'accesso all'array interno. Offre solo 3 metodi: insert(String), extract() e toString(). Questi devi usare. Se non ti vanno bene allora o non ho capito io cosa devi fare o quella FIFO non è appropriata/sufficiente per te.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  5. #5
    ho capito. Non è che riusciresti a modificarla, aggiungendo un metodo che possa aiutarmi a fare quello di cui ho bisogno?
    Grazie.

  6. #6
    ho inserito questo metodo nella classe FIFO

    codice:
    public boolean nonesiste(String s){
    	
    
    		for(int i=0; i<DIM; i++){ //scandisco l'array
    			
    			if (array[i]=s)       // se trovo l'elemento corrispondente esistente già. ritorno false
    				return false;
    			else
    				return true;
    	}
    e modificato il mio file cosi

    codice:
    /**
     * @(#)ProvaFiFO.java
     *
     *
     * @author 
     * @version 1.00 2012/1/13
     */
    
    import PackageFIFO.*;
    import java.io.*;
    import prog.io.*;
    
    public class ProvaFiFO {
    
       public static void main(String[] args) {
       	
       	ConsoleInputManager in= new ConsoleInputManager();
       	ConsoleInputManager inserisci= new ConsoleInputManager();
       	ConsoleOutputManager out= new ConsoleOutputManager();
       	
       	
      
       	FIFO a= new FIFO(3);
       	while (in.readSiNo("Inserisci altre lettere: ")){ //chiedo se si vogliono inserire altre lettere
       	
       	String InserisciLettera= inserisci.readLine("Inserisci LA LETTERA :   ");
       	    if (a.nonesiste(InserisciLettera))
       	    	a.insert(InserisciLettera);
       	     else
       	     	System.out.println("lettera esistente");
       	
       		   	             
       	                                  
       	 }
       	
       	
        }
        
        
    }
    ma inserisce le lettere e non fa il controllo.
    Avete qualche suggerimento per sbloccarmi da questo problema?

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Originariamente inviato da 19pantarei75
    codice:
    		for(int i=0; i<DIM; i++){ //scandisco l'array
    			
    			if (array[ i]=s)       // se trovo l'elemento corrispondente esistente già. ritorno false
    				return false;
    			else
    				return true;
    	}
    2 questioni:

    1) Primo, il concetto del ciclo. Se trovi l'elemento puoi restituire subito false (false=esiste, il metodo dal nome "nonesiste" dovrebbe appunto dare true se non esiste).
    Ma se l'elemento i-esimo non è quello che cerchi, NON puoi restituire subito true. Solo dopo la fine del for puoi dire "ok, non esiste" !

    2) Secondo, se vuoi comparare il contenuto delle stringhe, si usa equals(), NON ==.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

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.