istruzioni condizionali
if
if (<espressione booleana>) <singola istruzione>;
Oppure
if (<espressione booleana>)
{
<istruzioni>;
}
if else
if (<espressione booleana>) <caso true>;
else <caso false>;
Oppure
if (<espressione booleana>)
{
<caso true>;
}
else
{
<caso false>;
}
N.B.: esiste il problema dell’else sospeso
ambiguità dell’else sospeso
if (<condizione1>)
if (<condizione2>)
<istruzioneA>
else
<istruzioneB>
N.B.: Dato che non ci sono le graffe per disambiguare, non è ovvio se l’else si riferirà al primo o al secondo if, infatti il compilatore lo assocerà sbagliando all’if più vicino (
<condizione2>
).
if else multiplo
if <condizione1>: <istruzione1>;
else if <condizione2>: <istruzione2>;
else if <condizione3>: <istruzione3>;
else if <condizioneN>: <istruzioneN>;
operatore condizionale (Elvis notation 🕺)
<condizione> ? <valore caso vero> : <valore caso falso>;
Esempi:
int abs = x < 0 ? -x : x;
int max = x > y ? x : y;
String testaCroce = Math.random() < 0.5 ? "Testa" : "Croce";
switch case
switch(<espressione intera con risultato intero, char compresi>)
{
case <risultato dell espressione numero 0>: <istruzione0>; break;
case <risultato dell espressione numero 1>: <istruzione1>; break;
case <risultato dell espressione numero 2>: <istruzione2>; break;
case <risultato dell espressione numero N>: <istruzioneN>; break;
default: <istruzione da eseguire se il caso non è tra i precedenti>; break;
};
switch compatti
switch(<espressione intera con risultato intero, char compresi>)
{
case <risultato dell espressione numero 0> -> <istruzione0>;
case <risultato dell espressione numero 1> -> <istruzione1>;
case <risultato dell espressione numero 2> -> <istruzione2>;
case <risultato dell espressione numero N> -> <istruzioneN>;
default -> <istruzione da eseguire se il caso non è tra i precedenti>;
};
N.B.: L’operatore freccia sottintende il break.
espressione switch
Esempio:
String s = switch(c) {
case 'k' -> "kappa";
case 'h' -> "acca";
case 'e' -> "elle";
case 'c' -> "ci";
case 'a', 'e', 'i', 'o', 'u' -> 'vocale';
};
cicli
while
while (<espressione booleana>) <singola istruzione>;
while (<espressione booleana>)
{
<istruzioni>;
}
N.B.: l’espressione booleana può svolgere due compiti insieme: controllare se la condizione del ciclo si verifica e incrementare/decrementare grazie al post incremento o decremento:
Esempio:
public static String getLinea(int k)
{
String s = "";
while (k-- > 0) s += "*";
return s;
}
do while
do
{
<istruzioni>;
}
while (<espressione booleana>)
for
for (<inizializzazione>; <espressione booleana>; <incremento>) <singola istruzione>;
for (<inizializzazione>; <espressione booleana>; <incremento>)
{
<istruzioni>;
}
equivale a
<inizializzazione>
while (<espressione booleana>)
{
<istruzioni>;
<incremento>;
}
for (int i=0, i<=10, i+=3) {...} /* l'incremento non è necessariamente unitario*/
for (int i=10, i>0, i--) {...} /* la variabile di controllo non deve essere necessariamente crescente */
for (int k=0, i=0, i<=10; i++, k+=5) {...} /* Le istruzioni di inizializzazione e incremento possono riferirsi a più variabili */
break
Indipendentemente dal tipo di ciclo (while, do…while, for), può essere necessario uscire dal ciclo durante l’esecuzione del suo corpo.
- L’istruzione break permette di uscire solo dal ciclo corrente se non si specifica un’etichetta, quindi come fare nel caso in cui si voglia uscire da una sequenza di cicli annidati?
- Si può specificare un’etichetta prima di un ciclo e uscire da quel ciclo con break <etichetta>