Luigi Arlotta
a- a+

Il costrutto If... Then... Else...

Il costrutto if... then... else..., tramite il quale è possibile controllare il flusso logico del programma, viene espresso in Java secondo la seguente sintassi:

if (condizione)
istruzione1;
else
istruzione2;

Dove condizione è un'espressione booleana che generalmente consiste nel confrontare una variabile con una costante o due variabili tra loro e restituisce un valore booleano (true o false). Se la condizione risulta vera (cioè viene restituito il valore true) allora viene eseguita istruzione1 altrimenti viene eseguita istruzione2. Osserviamo il seguente esempio:

int var1 = 3;
int var2 = 2;
if (var1 > var2)
System.out.println (var1 + " è maggiore di " + var2);
else
System.out.println(var1 + " è minore di " + var2);


Il programma valuta l'espressione booleana (var1 > var2) che risulta falsa (false). L'istruzione immediatamente successiva non verrà eseguita, mentre verrà eseguita l'istruzione contenuta nel ramo else. L'output del programma sarà:


3 è maggiore di 2

Per eseguire confronti tra variabili e/o costanti si fa uso degli operatori di confronto, di cui abbiamo già parlato, tuttavia li riportiamo per comodità ancora una volta in tab.4.1.

= = Uguale a
> Maggiore di
< Minore di
!= Diverso da
>= Maggiore o uguale a
<= Minore o uguale a
Tab.4.1: Operatori di confronto



Fate attenzione all'operatore "uguale a" che è espresso da due simboli "=" (uguale) affiancati ("=="). Uno degli errori più comuni commessi dai programmatori, non solo in Java, è quello di dimenticare un simbolo "=" nell'eseguire un confronto. Questo tipo di errore altera gravemente il flusso logico del programma. Osservate le seguenti righe:

if (Cognome == "Rossi")
println ("Hello, Mr. Rossi!");


Cognome = "Rossi";


Cognome = "Rossi";
La prima istruzione viene interpretata come un confronto e restituisce il valore vero se la variabile Cognome contiene il valore "Rossi" , falso altrimenti. La seconda istruzione invece assegna il valore "Rossi" alla variabile Cognome.

Se desideriamo che a seguito di un'istruzione if...then...else... vengano eseguite non una sola, ma più istruzioni, è necessario far uso delle parentesi graffe il cui scopo è quello di creare un unico blocco in cui possono essere contenute più istruzioni. Questo è quanto viene fatto nell'esempio che segue:

int var1 = 3;
int var2 = 7;
if (var1 > var2) {
System.out.println (var1 + " è maggiore di " + var2);
System.out.println (var2 + " è minore di " + var1);
} else {
System.out.println (var2 + " è maggiore di " + var1);
System.out.println (var1 + " è minore di " + var2);
}

 

In questo caso il confronto risulterà falso e verranno eseguite le due istruzioni contenute nel blocco corrispondente al ramo else. L'output sarà:


7 è maggiore di 3
3 è minore di 7

Quando siamo interessati ad analizzare non più una sola, ma più condizioni prima di decidere quale istruzione eseguire, possiamo creare strutture di if... then... else... a catena. Questo ci consente di indicare una serie di condizioni che verranno analizzate una ad una in ordine sequenziale. Ogni condizione viene testata solo se tutte le precedenti sono risultate false. Se una condizione risulta vera tutte le condizioni successive, sia vere che false, non verranno prese in considerazione. La sintassi di un'istruzione if... then... else... a catena è la seguente:

If (condizione1) istruzione1;
else if (condizione2) istruzione2;
...
else if (condizioneN) istruzioneN;
else istruzione;


di seguito è riportato un esempio:

int var1 = 3;
int var2 = 7;
if (var1 > var2)
System.out.println (var1 + " è maggiore di " + var2);
else if (var1 == var2)
System.out.println (var1 + " è uguale a " + var2);
else
System.out.println (var1 + " è minore di " + var2);

Una serie di condizioni espresse tramite il costrutto if... else if... vengono verificate sequenzialmente, una dopo l'altra, fin quando una di esse non risulta vera (true) provocando l'esecuzione delle istruzioni contenute nel blocco corrispondente. Tutte le condizioni dei rami else if... successivi a quello contenente la condizione risultata vera non vengono valutate. Spesso accade che una serie di istruzioni if... else if... contengano più di una condizione vera. In questi casi solo la prima di esse viene valutata e le corrispondenti istruzioni eseguite. Osservate l'esempio:

int var1 = 3;
int var2 = 7;
if (var1 > var2*2)
System.out.println (var1 + " è più del doppio di " + var2);
else if (var1 > var2)
System.out.println (var1 + " è maggiore di " + var2);
else if (var1*2 < var2)
System.out.println (var1 + " è meno della metà " + var2);
else if (var1 < var2)
System.out.println (var1 + " è minore di " + var2);
else
System.out.println (var1 + " è uguale a " + var2);

In questo caso la prima e seconda condizione risultano false, mentre la terza e la quarta sono entrambe vere. Al momento dell'esecuzione, raggiunta la terza condizione, questa risulterà vera e quindi verrà stampato l'output:


3 è meno della metà di 7

La condizione contenuta nel ramo successivo, seppur vera non verrà neanche presa in considerazione. Nel descrivere una catena if... else if... è necessario tener presente questa caratteristica del costrutto e quindi dedicare una particolare attenzione all'ordine con cui si susseguono le condizioni. Osservate l'esempio precedente e provate a scambiare tra loro la prima condizione con la seconda e la terza con la quarta. La catena perde di senso in quanto vengono a crearsi due rami che sicuramente non verranno mai eseguiti.

Il costrutto if... then... else... viene completato dall'utilizzo degli operatori booleani AND, OR e NOT, di cui abbiamo già parlato nel capitolo 3. Tali operatori sono espressi in Java tramite la sintassi riportata in tabella 4.2.

&& AND
|| OR
! NOT
Tab.4.2: Operatori logici



L'uso di questi operatori consente di costruire complesse espressioni booleane che vengono valutate in base alle tavole di verità di cui probabilmente già conoscerete il funzionamento, ma che comunque sono riportate nella tabella 4.3.



a b a AND b a OR b NOT a
Vero Vero Vero Vero Falso
Vero Falso Falso Vero Falso
Falso Vero Falso Vero Vero
Falso Falso Falso Falso Vero
Tab.4.3: Tabelle di verità

 



Ti potrebbe interessare anche

commenta la notizia

Ci sono 1 commenti
Lavitz53
Ottima la guida! almeno fino a questa pagina, fai degli ottimi esempi, é molto piu semplice di come la spiega il prof all'universitá o il libro di java. Ti prego continua a scriverla!!!!!