View Full Version : [JAVA] : Enumerazioni
Salve,
è possibile avere un semplicissimo esempio di enmerazione in java per poi essere utilizzato oin uno switch
se ho
public enum MiaEnumerazione {
UNO,DUE,TRE;
}
come deve essere strutturato uno switch.
grazie
non lo so ma ci provo:
Scanner sc = new Scanner(System.in);
int scelta = sc.nextInt();
MiaEnumerazione me;
switch(scelta)
{
case me.UNO:
break;
case me.DUE:
break;
case me.TRE:
break;
}
wizard_at
04-10-2008, 12:48
in questo caso pero' ti conviene quasi usare delle costanti.
UNO=1;
due=2ecc...
e poi nello switch usare UNO DUE ecc..
aggiungo una domanda:
non si puo' scrivere anche MiaEnumerazione.UNO?
non lo so ma ci provo:
Scanner sc = new Scanner(System.in);
int scelta = sc.nextInt();
MiaEnumerazione me;
switch(scelta)
{
case me.UNO:
break;
case me.DUE:
break;
case me.TRE:
break;
}
uhm... non compila: scelta è un int, ma poi nello switch discrimini i vari rami case in base a valori di tipo MiaEnumerazione, non si può.
uno switch con una enum ti permette di: scegliere, in base a un qualsiasi criterio, che costante attribuire alla enum:
int scelta=...;
switch(scelta) {
case 1: me=MiaEnumerazione.UNO; break;
case 2: me=MiaEnumerazione.DUE; break;
case 3: me=MiaEnumerazione.TRE; break;
default: me=null
}
oppure, nell'altro senso, di scegliere che azione intraprendere in base al valore della enum:
MiaEnumerazione me=...;
switch(me) {
case UNO: /* fai qualcosa */ ; break;
case DUE: /* fai qualcosa */ ; break;
case TRE: /* fai qualcosa */; break;
}
ciao!
british
in questo caso pero' ti conviene quasi usare delle costanti.
UNO=1;
due=2ecc...
e poi nello switch usare UNO DUE ecc..
aggiungo una domanda:
non si puo' scrivere anche MiaEnumerazione.UNO?
IMHO è sempre una cosa buona&giusta usare un'enumerazione al posto di un gruppo di costanti intere, per diversi motivi:
1. un'enumerazione definisce un dominio, ovvero un insieme di valori (simbolici) accettabili. questo è già un buon aiuto alla correttezza del programma
enum Codice { ROSSO, GIALLO, VERDE }
public static final int ROSSO=3;
public static final int GIALLO=2;
public static final int VERDE=1;
Codice codE=Codice.ROSSO; // codE è o ROSSO o GIALLO o VERDE o null
int codN=GIALLO; // ok
int codN=37; // questo è legale, ma non va bene! che roba è 37?
2. a un oggetto enum, a differenza che a un intero, è possibile attribuire un valore null: questo può per esempio esprimere il concetto di "ignoto". con le costanti intere dovresti o aggiungere una costante a parte (-1, per es.) per indicare ciò o ricorrere ai tipi wrapper (Integer) e all'autoboxing
3. a una enum è possibile associare dati aggiuntivi, attraverso l'aggiunta di campi e metodi, o anche ridefinendo toString()
4. proprio perchè definiscono un insieme, le enum non ammettono valori duplicati. se hai invece delle costanti intere tipo ROSSO=3, GIALLO=2, VERDE=1, BIANCO=0, NERO=4 come fai a garantire che da qualche parte non salti fuori un VIOLA=3 ? che in tal caso
public static final int ROSSO=3;
public static final int GIALLO=2;
...
public static final int VIOLA=3;
int cod=ROSSO;
if(cod==VIOLA)
// è viola per davvero? uhm...!
ti darebbe qualche problema!
ciao!
british
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.