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

    [JAVA] Scelta casuale da un insieme ENUMS

    Ho definito una ENUM

    codice:
    public enum Direzione 
        {
            NORD(0,-1),SUD(0,1),OVEST(-1,0),EST(1,0);
        }
    Dalla classe principale vorrei richiamare uno di questi elementi in maniera casuale.
    Che strategia mi consigliate?
    -Montanelli-: Ma lei evadeva quasi sempre, no?

    -Mesina-: Sì, ho la fortuna di avere i polsi più grossi delle mani...

  2. #2
    beh, io ti consiglierei in maniera molto semplice di fare cosi:

    ti associ un numero ad ogni direzione...
    esempio: 0 per nord, 1 per sud, 2 per est, 3 per ovest

    poi ti calcoli un numero casuale da 0 a 3...

    ti prendi il risultato e fai uno switch o 4 if (come preferisci)
    se numerocasuale==0 allora scegli nord
    etc etc...

    può andare?

    stex1984

  3. #3
    Ho pensato anch'io questa soluzione, grazie.
    Vediamo se ne esistono altre
    -Montanelli-: Ma lei evadeva quasi sempre, no?

    -Mesina-: Sì, ho la fortuna di avere i polsi più grossi delle mani...

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

    Re: [JAVA] Scelta casuale da un insieme ENUMS

    Originariamente inviato da graziano mesina
    Dalla classe principale vorrei richiamare uno di questi elementi in maniera casuale.
    Che strategia mi consigliate?
    Questa è una possibilità:
    codice:
    public enum Direzione
    {
        NORD(0,-1),SUD(0,1),OVEST(-1,0),EST(1,0);
        
        private int dx, dy;
        
        Direzione (int dx, int dy)
        {
            this.dx = dx;
            this.dy = dy;
        }
    
        public int getDeltaX () { return dx; }
        public int getDeltaY () { return dy; }
    
        public static Direzione random ()
        {
            Random rnd = new Random ();
    
            return values()[rnd.nextInt (4)];
        }
    }
    Basta richiamare Direzione.random() per avere una direzione "casuale".
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    grazie del suggerimento!

    Ho provato a richiamarlo dalla classe principale

    codice:
    Direzione dir;
    
    dir = dir.random();
    ma quando avvio il programma mi dà l'errore:

    NullPointerException null;
    -Montanelli-: Ma lei evadeva quasi sempre, no?

    -Mesina-: Sì, ho la fortuna di avere i polsi più grossi delle mani...

  6. #6
    Puoi risolvere il problema in due modi.

    Il primo, inizializzando l'enum a null:
    codice:
    Direzione dir = null;
    dir = dir.random();
    Il secondo, usando direttamente il metodo statico random():
    codice:
    Direzione dir = Direzione.random();
    Il mio Blog

    Nella vita come sul tram, quando ti siedi sei al capolinea.
    Camillo Sbarbaro

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da graziano mesina
    Ho provato a richiamarlo dalla classe principale

    codice:
    Direzione dir;
    
    dir = dir.random();
    ma quando avvio il programma mi dà l'errore:

    NullPointerException null;
    Il modo corretto di richiamare un metodo statico è:

    nome_della_classe.metodo (...);

    Quindi (come ha detto anche taita): Direzione.random ();
    Queste sono cose basilari di Java ... :rollo:


    Comunque volevo fare una precisazione sul mio codice (che voleva essere solo un semplice esempio): la creazione di un oggetto Random dentro il metodo random potrebbe non essere una buona cosa dal punto di vista della "pseudo-casualità". Ci sarebbero 2 soluzioni:

    (1) Tenere all'interno dell'enum un campo privato e statico con un Random.
    codice:
        private static Random rnd = new Random (System.currentTimeMillis ());
    (2) Passare al metodo random() un oggetto Random. In questo modo il Random può essere creato al di fuori in qualunque altro modo secondo i gusti di chi dovrà utilizzare il metodo random.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Le tue osservazioni sono molto attente: secondo me la soluzione migliore per Graziano è la prima che hai detto, per la semplicità.

    Credo che alla scelta della funzione casuale con cui sono estretti i valori dell'enum, preferisca la semplicità d'uso Non escludo che altre applicazioni (come un simulatore ad eventi discreti) avrebbero preferito la seconda soluzione.
    Il mio Blog

    Nella vita come sul tram, quando ti siedi sei al capolinea.
    Camillo Sbarbaro

  9. #9
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da taita
    secondo me la soluzione migliore per Graziano è la prima che hai detto, per la semplicità.
    Concordo. Inoltre se uno proprio volesse, può implementare entrambi i metodi tramite overload.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava 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 © 2025 vBulletin Solutions, Inc. All rights reserved.