PDA

View Full Version : [JAVA] : Enumerazioni


robs05
04-10-2008, 10:57
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

ndakota
04-10-2008, 11:15
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?

british
05-10-2008, 13:39
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

british
05-10-2008, 13:57
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