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

    [java] attributo Static

    salve a tutti

    in un mio programma devo realizzare una sorta di coda di clienti di vari reparti,i quali sono identificati da un codicee dal reparto.
    Mi viene chiesto quindi che all'inserimento di ogni cliente, a questo gli venga attribuito un numero ovviamente crescente.
    Ho utilizzato il modificatore static, ma ho dei problemi visto che tutti i clienti condivideranno questo attributo.(intanto ho visto degli esempi in cui si utilizzava static per questi tipi di problemi)

    vi posto il codice:
    codice:
    public class Numero{ 	
    private static int numero=0; 	
    private int coda; 	
    private String codice; 	
    private String reparto; 	
    
    public Numero(String codice,String reparto){ 
    this.codice=codice; 
    this.reparto=reparto; 
    numero++; 
    coda=numero; 
    }
    grazie

  2. #2
    di preciso perchè hai usato static??

  3. #3
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    static in questo contesto indica che l'attributo è condiviso tra tutte le istanze di Numero.

    Quello che puoi fare è creare una classe a parte, ad esempio "ErogatoreCodiceUnivoco" che al suo interno ha un attributo statico che contiene il numero raggiunto ed un metodo per farsi dare un nuovo numero Ad ogni richiesta incrementi tale numero prima di restituirlo.
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  4. #4
    Facendo uso ad esempio di un solo reparto, ho trovato una mia soluzione che credo vada bene(funziona almeno )

    nella classe:
    codice:
    private static int cont=0;
    private int numero;
    nel costruttore:

    codice:
    cont++; 	
    numero=cont;

  5. #5
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da TommyR222
    Facendo uso ad esempio di un solo reparto, ho trovato una mia soluzione che credo vada bene(funziona almeno )
    "Ma almeno funziona!" è una di quelle frasi che un programmatore non dovrebbe mai dire :P

    La tua soluzione magari va bene in questo caso ma è fortemente legata a questo caso e quindi poco modulare. Se domani un altro esercizio necessita di un sistema simile cosa fai, lo riscrivi da capo?
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  6. #6
    indubbiamente il mio "Funziona almeno" era inteso come "ci sono riuscito!"
    ovviamente non ho provato a caso,ma dalla tua chiara spiegazione della classe ho provato a fare altri ragionamenti e a scrivere quel piccolo codice abbastanza semplice quanto funzionale

  7. #7
    Fatto proprio alla carlona, il tuo problema può essere risolto così:

    Gestisco la coda
    codice:
    public class EliminaCoda {
        
        private int size;
        private int next;
        
        public EliminaCoda(){
            reset();
        }
        
        public int add(){
            return ++size;
        }
        
        public int next(){
            return isEmpty() ? 0 : ++next;
        }
        
        public boolean isEmpty(){
            return next>=size;
        }
        
        public int size(){
            return size-next;
        }
        
        public void reset(){
            size = 0;
            next = 0;
        }
        
    }

    Gestisco lo sportello per il reparto i-esimo
    codice:
    public class Sportello {
        
        private String codiceReparto;
        private String nomeReparto;
        private EliminaCoda queue;
        
        public Sportello(EliminaCoda queue, String codiceReparto, String nomeReparto){
            this.queue = queue;
            this.codiceReparto = codiceReparto;
            this.nomeReparto = nomeReparto;
        }
        
        public int prendiNumero(){
            return queue.add();
        }
        
        public int chiamaProssimoCliente(){
            return queue.next();
        }
        
        public int clientiInCoda(){
            return queue.size();
        }
        
        @Override
        public String toString(){
            return String.format("sportello per reparto %s - %s ",this.codiceReparto,this.nomeReparto);
        }
    }
    Test:
    codice:
    public class poste {
    
        /**
         * @param args the command line arguments
         */
        public static void main(String[] args) {
           
            
            //creo gli sportelli
            Sportello sp1 = new Sportello(new EliminaCoda(),"c1","reparto1");
            Sportello sp2 = new Sportello(new EliminaCoda(),"c2","reparto2");
            Sportello sp3 = new Sportello(new EliminaCoda(),"c3","reparto3");
            
            System.out.println(sp1);
            System.out.println(sp2);
            System.out.println(sp3);
            
            //aggiungo clienti sportello 1
            for(int i = 0; i<9;i++){
                System.out.println("Entrato cliente in "+sp1+ " , posizione in coda "+sp1.prendiNumero());
            }
            
            //aggiungo clienti sportello 2
            for(int i = 0; i<15;i++){
                System.out.println("Entrato cliente in "+sp2+ " , posizione in coda "+sp2.prendiNumero());
            }
            
            //aggiungo clienti sportello 3
            for(int i = 0; i<10;i++){
                System.out.println("Entrato cliente in "+sp3+ " , posizione in coda "+sp3.prendiNumero());
            }
            
            System.out.println("Servo i clienti:");
            for(int i = 0; i<16; i++){
                
                System.out.println("Numero clienti in coda per "+sp1+" : "+sp1.clientiInCoda());
                System.out.println("Numero clienti in coda per "+sp2+" : "+sp2.clientiInCoda());
                System.out.println("Numero clienti in coda per "+sp3+" : "+sp3.clientiInCoda());
                
                if(sp1.clientiInCoda()>0)
                {
                    System.out.println("Servo cliente "+sp1+" codice "+sp1.chiamaProssimoCliente());
                }
                
                if(sp2.clientiInCoda()>0)
                {
                    System.out.println("Servo cliente "+sp2+" codice "+sp2.chiamaProssimoCliente());
                }
                
                if(sp3.clientiInCoda()>0)
                {
                    System.out.println("Servo cliente "+sp3+" codice "+sp3.chiamaProssimoCliente());
                }
            }
            
            System.out.println("Orario di chiusura, spero di aver servito tutti i clienti");
            
        }
    }
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

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 © 2025 vBulletin Solutions, Inc. All rights reserved.