Luigi Arlotta
a- a+

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

Il costrutto if... then... else..., tramite il qualeè possibile controllare il flusso logico delprogramma, viene espresso in Java secondo la seguentesintassi:

if (condizione)istruzione1;elseistruzione2;

Dove condizione è un'espressione booleanache generalmente consiste nel confrontare una variabile conuna costante o due variabili tra loro e restituisce un valorebooleano (true o false). Se la condizione risulta vera(cioè viene restituito il valore true) allora vieneeseguita istruzione1 altrimenti viene eseguitaistruzione2. Osserviamo il seguente esempio:

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


Il programmavaluta l'espressione booleana (var1 > var2) cherisulta falsa (false). L'istruzione immediatamentesuccessiva 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 usodegli operatori di confronto, di cui abbiamo giàparlato, tuttavia li riportiamo per comodità ancorauna 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 "ugualea" che è espresso da due simboli"=" (uguale) affiancati ("=="). Uno deglierrori più comuni commessi dai programmatori, non soloin Java, è quello di dimenticare un simbolo"=" nell'eseguire un confronto. Questo tipo dierrore 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 vieneinterpretata come un confronto e restituisce il valore verose la variabile Cognome contiene il valore"Rossi" , falso altrimenti. La secondaistruzione invece assegna il valore "Rossi"alla variabile Cognome.

Se desideriamo che a seguito di un'istruzioneif...then...else... vengano eseguite non una sola, mapiù istruzioni, è necessario far uso delleparentesi graffe il cui scopo è quello di creare ununico blocco in cui possono essere contenute piùistruzioni. Questo è quanto viene fattonell'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 verrannoeseguite le due istruzioni contenute nel bloccocorrispondente al ramo else. L'output sarà:


7 è maggiore di 3
3 è minore di 7

Quando siamo interessati ad analizzare non più unasola, ma più condizioni prima di decidere qualeistruzione eseguire, possiamo creare strutture di if...then... else... a catena. Questo ci consente di indicareuna serie di condizioni che verranno analizzate una ad una inordine sequenziale. Ogni condizione viene testata solo setutte le precedenti sono risultate false. Se una condizionerisulta vera tutte le condizioni successive, sia vere chefalse, non verranno prese in considerazione. La sintassi diun'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);elseSystem.out.println (var1 + " è minore di " + var2);

Una serie di condizioni espresse tramite il costruttoif... else if... vengono verificate sequenzialmente,una dopo l'altra, fin quando una di esse non risulta vera(true) provocando l'esecuzione delle istruzioni contenutenel blocco corrispondente. Tutte le condizioni dei ramielse if... successivi a quello contenente lacondizione risultata vera non vengono valutate. Spesso accadeche una serie di istruzioni if... else if...contengano più di una condizione vera. In questi casisolo la prima di esse viene valutata e le corrispondentiistruzioni 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);elseSystem.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 momentodell'esecuzione, raggiunta la terza condizione, questarisulterà vera e quindi verrà stampatol'output:


3 è meno della metà di 7

La condizione contenuta nel ramo successivo, seppur vera nonverrà neanche presa in considerazione. Nel descrivereuna catena if... else if... è necessario tenerpresente questa caratteristica del costrutto e quindidedicare una particolare attenzione all'ordine con cui sisusseguono le condizioni. Osservate l'esempio precedentee provate a scambiare tra loro la prima condizione con laseconda e la terza con la quarta. La catena perde di senso inquanto vengono a crearsi due rami che sicuramente nonverranno mai eseguiti.

Il costrutto if... then... else... viene completatodall'utilizzo degli operatori booleani AND, OR e NOT, dicui abbiamo già parlato nel capitolo 3. Tali operatorisono espressi in Java tramite la sintassi riportata intabella 4.2.

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



L'uso di questi operatori consente di costruirecomplesse espressioni booleane che vengono valutate in basealle tavole di verità di cui probabilmentegià conoscerete il funzionamento, ma che comunque sonoriportate 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!!!!!