You are on page 1of 6

Lo statement SWITCH

Un caso particolare di selezione multipla si ha quando si desidera confrontare il contenuto di una variabile con un insieme di valori. La sintassi dello statement switch switch (id_variabile) { case valore_1: istruzioni case valore_2: istruzioni ..................... default: istruzioni } dove: id_variabile lidentificatore della variabile il cui contenuto deve essere confrontato con un insieme di valori; valore_1, valore_2,..., sono i valori da confrontare con id_variabile. La semantica dello statement switch vengono eseguite le istruzioni contenute nel case il cui valore coincide con quello della variabile; vengono eseguite anche tutte le istruzioni dei case successivi; se nessun valore coincide con quello della variabile, vengono eseguite le istruzioni contenute in default; default comunque opzionale. Esempio
switch(idvar) { case valore1: istruzione1; case valore2: istruzione2; istruzione3; case valore3: istruzione4; default: istruzione_default; }

idvar= = val ore1

vero

falso

i struzione 1

vero idvar= = val ore2

i struzione 2 falso i struzione 3

idvar= = val ore3

vero

falso

i struzione 4

i struzion e de faul t

Bocchi Cinzia Ultimo aggiornamento: 08/10/2011

Se il case soddisfatto quello corrispondente a valore2, vengono eseguite tutte le istruzioni successive (istruzione2, istruzione3, istruzione4, istruzione_default) e non solo istruzione2 e istruzione3. Se si desidera che vengano eseguite solo le istruzioni del case soddisfatto, bisogna inserire una istruzione break, alla fine delle istruzioni di ogni case. switch (id_variabile) { case valore_1: istruzioni break; case valore_2: istruzioni break; ..................... default: istruzioni break; } Esempio

fal so idvar= = val ore 1

ve ro

i stru zione 1 fal so idvar= = va lore2 vero

istruzione 2

fal so i dvar= = valore3

vero

istruzione 3

i struzione default

istruzione 4

switch(idvar) { case valore1: istruzione1; break; case valore2: istruzione2; istruzione3; break; case valore3: istruzione4; break; default: istruzione_default; break; } Bocchi Cinzia Ultimo aggiornamento: 08/10/2011

Limitazioni sui valori che pu assumere la variabile dello switch - Fino alla versione 1.4 del JDK la variabile di controllo dello switch poteva
assumere solo valori numerici di tipo int, byte, short e valori alfanumerici di tipo char. - Dalla versione 5 possibile utilizzare le enumerazioni, cio insiemi di valori predefiniti. - La versione 7 consente, invece, di utilizzare anche le stringhe.

Switch con valori Stringa


Uso di costanti
Definiamo le seguenti costanti1: public public public public static static static static final final final final int int int int ROSSO = 0; VERDE = 1; GIALLO = 2; BLU = 3;

Colori.java (JDK 1.4) import javax.swing.JOptionPane; public class public public public public Colori static static static static { final final final final int int int int ROSSO = 0; VERDE = 1; GIALLO = 2; BLU = 3;

public static void main(String[] args) { int coloreScelto = ROSSO; //Non preoccupatevi di questo codice Object[] colors = {"rosso", "verde", "giallo", "blu"}; String s = (String)JOptionPane.showInputDialog( null, "Scegli un colore", "SWITCH", JOptionPane.PLAIN_MESSAGE, null, colors, "rosso"); if ((s != null) && (s.length() > 0)) { if (s.equals("rosso")) coloreScelto = ROSSO; else if (s.equals("verde")) coloreScelto = VERDE; else if (s.equals("giallo")) coloreScelto = GIALLO; else if(s.equals("blu")) coloreScelto = BLU; }
1

Esempio tratto da Wikipedia http://it.wikipedia.org/wiki/Java_5#Tipo_enumerazione

Bocchi Cinzia Ultimo aggiornamento: 08/10/2011

//Osservate a partire da questo punto switch(coloreScelto){ case ROSSO: JOptionPane.showMessageDialog(null, "Hai scelto il colore rosso"); break; case VERDE: JOptionPane.showMessageDialog(null, "Hai scelto il colore break; case GIALLO: JOptionPane.showMessageDialog(null, "Hai scelto il colore break; case BLU: JOptionPane.showMessageDialog(null, "Hai scelto il colore break; }

verde");

giallo");

blu"); } }

Uso di enumerazioni
Il tipo enumerazione permette di definire una serie di valori costanti, senza dover esplicitamente assegnare ad ognuno di essi un corrispondente valore numerico. In Java 1.5 si pu utilizzare la parola chiave enum per definire lo stesso tipo di valori dellesempio precedente: public enum Colors { ROSSO, VERDE, GIALLO, BLU}; Osservate che la variabile coloreScelto non pi di tipo int ma di tipo Colors.
Colori2.java (JDK 5) import javax.swing.JOptionPane; public class Colori2 { public enum Colors {ROSSO, VERDE, GIALLO, BLU}; public static void main(String[] args) { Colors coloreScelto = Colors.ROSSO; //Non preoccupatevi di questo codice Object[] colors = {"rosso", "verde", "giallo", "blu"}; String s = (String)JOptionPane.showInputDialog( null, "Scegli un colore", "SWITCH", JOptionPane.PLAIN_MESSAGE, null, colors, "rosso"); if (s.equals("rosso")) coloreScelto = Colors.ROSSO; else if (s.equals("verde")) coloreScelto = Colors.VERDE; Bocchi Cinzia Ultimo aggiornamento: 08/10/2011

else if (s.equals("giallo")) coloreScelto = Colors.GIALLO; else if(s.equals("blu")) coloreScelto = Colors.BLU; } //Osservate a partire da questo punto switch(coloreScelto){ case ROSSO: JOptionPane.showMessageDialog(null, "Hai scelto il colore break; case VERDE: JOptionPane.showMessageDialog(null, "Hai scelto il colore break; case GIALLO: JOptionPane.showMessageDialog(null, "Hai scelto il colore break; case BLU: JOptionPane.showMessageDialog(null, "Hai scelto il colore } } } break;

rosso");

verde");

giallo");

blu");

Uso di Stringhe
La possibilit di utilizzare le stringhe, a partire dalla versione 7 di Java, permette di semplificare notevolmente il codice. Osservate che la variabile coloreScelto ora di tipo String.
Colori3.java (JDK 7) import javax.swing.JOptionPane; public class Colori3 { public static void main(String[] args) { String coloreScelto = "ROSSO"; //Non preoccupatevi di questo codice Object[] colors = {"rosso", "verde", "giallo", "blu"}; String s = (String)JOptionPane.showInputDialog( null, "Scegli un colore", "SWITCH", JOptionPane.PLAIN_MESSAGE, null, colors, "rosso"); //Osservate a partire da questo punto switch(coloreScelto){ case "ROSSO": JOptionPane.showMessageDialog(null, "Hai scelto il colore break; Bocchi Cinzia Ultimo aggiornamento: 08/10/2011

rosso");

verde");

case "VERDE": JOptionPane.showMessageDialog(null, "Hai scelto il colore break; case "GIALLO": JOptionPane.showMessageDialog(null, "Hai scelto il colore break; case "BLU": JOptionPane.showMessageDialog(null, "Hai scelto il colore } break;

giallo");

blu"); }

Codice della finestra di dialogo


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

Object[] colors = {"rosso", "verde", "giallo", "blu"}; String s = (String)JOptionPane.showInputDialog( null, "Scegli un colore", "SWITCH", JOptionPane.PLAIN_MESSAGE, null, colors, "rosso"); if (s.equals("rosso")) coloreScelto = "ROSSO"; else if (s.equals("verde")) coloreScelto = "VERDE"; else if (s.equals("giallo")) coloreScelto = "GIALLO"; else if(s.equals("blu")) coloreScelto = "BLU";

rigo 1: definisce un array di possibili scelte di colori. rigo 2: crea una finestra di dialogo di input con i seguenti parametri nellordine il frame che contiene la finestra di dialogo; il messaggio; il titolo della finestra; il tipo di messaggio; una icona; larray di scelte; il valore che deve apparire come selezionato. righi 10-17: presenti solo nelle versioni per JDK fino alla 6, assegna alla variabile coloreScelto il colore scelto mediante la finestra di dialogo, trasformandolo nel formato corretto (costante intera o tipo enum).

Quest'opera stata rilasciata con licenza Creative Commons Attribution-ShareAlike 3.0 Unported. Per leggere una copia della licenza visita il sito web http://creativecommons.org/licenses/by-sa/3.0/ o spedisci una lettera a Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA. Bocchi Cinzia Ultimo aggiornamento: 08/10/2011

You might also like