Ho definito una ENUM
Dalla classe principale vorrei richiamare uno di questi elementi in maniera casuale.codice:public enum Direzione { NORD(0,-1),SUD(0,1),OVEST(-1,0),EST(1,0); }
Che strategia mi consigliate?
Ho definito una ENUM
Dalla classe principale vorrei richiamare uno di questi elementi in maniera casuale.codice:public enum Direzione { NORD(0,-1),SUD(0,1),OVEST(-1,0),EST(1,0); }
Che strategia mi consigliate?
-Montanelli-: Ma lei evadeva quasi sempre, no?
-Mesina-: Sì, ho la fortuna di avere i polsi più grossi delle mani...
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
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...
Questa è una possibilità:Originariamente inviato da graziano mesina
Dalla classe principale vorrei richiamare uno di questi elementi in maniera casuale.
Che strategia mi consigliate?
Basta richiamare Direzione.random() per avere una direzione "casuale".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)]; } }
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
grazie del suggerimento!
Ho provato a richiamarlo dalla classe principale
ma quando avvio il programma mi dà l'errore:codice:Direzione dir; dir = dir.random();
NullPointerException null;
-Montanelli-: Ma lei evadeva quasi sempre, no?
-Mesina-: Sì, ho la fortuna di avere i polsi più grossi delle mani...
Puoi risolvere il problema in due modi.
Il primo, inizializzando l'enum a null:
Il secondo, usando direttamente il metodo statico random():codice:Direzione dir = null; dir = dir.random();
codice:Direzione dir = Direzione.random();
Il modo corretto di richiamare un metodo statico è:Originariamente inviato da graziano mesina
Ho provato a richiamarlo dalla classe principale
ma quando avvio il programma mi dà l'errore:codice:Direzione dir; dir = dir.random();
NullPointerException null;
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.
(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.codice:private static Random rnd = new Random (System.currentTimeMillis ());
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
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'usoNon escludo che altre applicazioni (come un simulatore ad eventi discreti) avrebbero preferito la seconda soluzione.
Concordo. Inoltre se uno proprio volesse, può implementare entrambi i metodi tramite overload.Originariamente inviato da taita
secondo me la soluzione migliore per Graziano è la prima che hai detto, per la semplicità.
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet