250 likes | 398 Views
Corso di Informatica (Programmazione). Lezione 10 (12 novembre 2008) Programmazione in Java: espressioni booleane e controllo del flusso (selezione). Il tipo boolean. Il tipo boolean è in Java un tipo primitivo che che può assumere esclusivamente due valori: true e false. Esempio:
E N D
Corso di Informatica(Programmazione) Lezione 10 (12 novembre 2008) Programmazione in Java: espressioni booleane e controllo del flusso (selezione)
Il tipo boolean Il tipo boolean è in Java un tipo primitivo che che può assumere esclusivamente due valori: true e false Esempio: boolean b; b=true; System.out.println(b); b=false; System.out.println(b);
Espressione booleana Un’espressionebooleana è una combinazione di operandi (variabili e valori), operatori aritmetici, operatori relazionali, operatori logici e parentesi tonde. Un’espressione booleana restituisce in Java un valore di tipo boolean e può essere pertanto assegnata ad una variabile di tipo boolean Esempio: boolean b; int x=10; b=(x > 5); // b contiene il valore true
Operatori relazionali Gli operatorirelazionali confrontano due operandi numerici e ne determinano la relazione restituendo un valore di tipo boolean
Operatori relazionali (esempi) Esempio 1: int x=3; int y=4; boolean b; b=(x<=y); System.out.println(b); La stampa è true
Operatori relazionali (esempi) Esempio 2: int x=3; int y=4; boolean b; b=(x==y); System.out.println(b); La stampa è false
Operatori relazionali (esempi) Esempio 3: int x=3; int y=4; boolean b; b=(x!=y); System.out.println(b); La stampa è true
Operatori logici Gli operatorilogici operano su operandi booleani (espressione booleana, variabile booleana o valore booleano esplicito)
Operatori logici (esempio) Esempio: int x=3; int y=4; boolean b; b=(x!=0 && x>y); System.out.println(b); La stampa è false
Operatori logici La forma abbreviata degli operatori di AND e OR differisce dalla forma normale per il fatto che se una valutazione fallisce, le successive valutazioni non vengono eseguite. Ad esempio: int x=3; int y=0; boolean b; b=(y!=0 && x>y); L’espressione x>y non viene valutata in quanto y!=0 è false e basta già per dire che l’intera espressione assegnata a b è false.
Operatori logici ...oppure: int x=3; int y=0; boolean b; b=(y==0 || x>y); L’espressione x>y non viene valutata in quanto y==0 è true e basta già per dire che l’intera espressione assegnata a b è true. Attenzione! Non è detto che l’ordine di valutazione sia quello di codifica dell’espressione… Quindi bisogna andare cauti con istruzioni che potrebbero generare errori in runtime
Precedenza degli operatori • Operatori elencati per precedenza decrescente: • pre-incremento ++, pre-decremento --, negazione aritmetica - • post-incremento ++ e post-decremento -- e negazione logica ! • moltiplicazione *, divisione / e modulo % • somma + e sottrazione – • minore <, maggiore >, minore o uguale <=, maggiore o uguale >=
Precedenza degli operatori • ... • uguale a ==, diverso da != • AND & • OR | • AND && • OR || • assegnamenti: =, +=, -=, *=, /=, %=
Controllo del flusso • Il controllodel flusso è l’esecuzione ordinata di una sequenza di istruzioni. Il controllo del flusso (che vediamo…) può essere: • sequenziale esegue le istruzioni una alla volta nell’ordine in cui sono state scritte • selezione esegue le istruzioni scelte tra almeno due possibilità • iterazione esegue ripetutamente delle istruzioni finchè si verifica una certa condizione
Selezione • I costrutti di selezione (che vediamo…) sono: • if (selezione a una via) • if-else (selezione a due vie) • Nel costrutto di selezione viene effettuato un test (definito da un’espressione booleana che restituisce true o false). Se il test è positivo (true) “si fa qualcosa” altrimenti “non si fa nulla” nella selezione a una via, o “si fa qualcosa d’altro” nella selezione a due vie.
Selezione a una via La selezionea una via permette di eseguire un blocco di istruzioni oppure di saltarlo if(<boolEXPR>){ <BLOCK>; } <instruction_afterIF>; ... dove <boolEXPR> è l’espressione booleana che valutata decide se eseguire o meno il blocco di istruzioni definito da <BLOCK>. Se <boolEXPR> restituisce true, <BLOCK> viene eseguito, il controllo diventa in seguito sequenziale e viene eseguita l’istruzione successiva <instruction_afterIF>. Se <boolEXPR> restituisce false, <BLOCK> viene saltato e viene subito eseguita l’istruzione successiva <instruction_afterIF>.
Selezione a una via (esempi) Esempio 1: int x=3; if(x > 2){ x++; } System.out.println(“x=“+x); La stampa è “x=4”
Selezione a una via (esempi) Esempio 2: int x=3; if(x < 3){ x++; } System.out.println(“x=“+x); La stampa è “x=3”
Selezione a due vie La selezionea due vie permette di effettuare una scelta tra due blocchi di istruzioni if(<boolEXPR>){ <BLOCK1>; } else{ <BLOCK2> } <instruction_afterIF>; ... dove <boolEXPR> è l’espressione booleana che valutata decide se eseguire <BLOCK1> oppure <BLOCK2>. Se <boolEXPR> restituisce true, viene eseguito <BLOCK1>, ...
Selezione a due vie ... il controllo diventa in seguito sequenziale e viene eseguita l’istruzione successiva <instruction_afterIF>. Se invece <boolEXPR> restituisce false, viene eseguito <BLOCK2>, il controllo diventa in seguito sequenziale e viene sempre eseguita l’istruzione <instruction_afterIF>.
Selezione a due vie (esempio) Esempio: int x=3, y=4, min; if(x < y){ min=x; } else{ min=y; } System.out.println(“Minimo=“+min); La stampa è “Minimo=3”
Selezione Nel caso in cui i blocchi di istruzioni dei costrutti di selezione (a una e a due vie) siano composti da una sola istruzione, le parentesi graffe di delimitazione non sono necessarie. Ad esempio il codice della slide precedente può essere riscritto nel modo seguente: int x=3, y=4, min; if(x < y) min=x; else min=y; System.out.println(“Minimo=“+min);
Selezione annidata I blocchi di istruzioni di un costrutto di selezione (a una o a due vie) possono essere a loro volta costrutti di selezione (a una o a due vie). Ad esempio: if(<boolEXPR1>){ if(<boolEXPR2>){ ... } else{ ... } } else{ if(<boolEXPR3>){ ... } else{ ... } }
Selezione annidata (esempio) Esempio: int x=3, y=4, z; if(x != y){ if(x < y) z=x; else z=y; } else{ z=0; } System.out.println(“Z=“+z); La stampa è “Z=3”
Scope di una variabile Una variabile è visibile solo all’interno del blocco di codice in cui viene diachiarata! Ad esempio nel codice seguente: int x=10; if(x < 20){ int y=30; System.out.println(x+y); } System.out.println(y); //ISTRUZIONE ERRATA! La variabile y NON ESISTE al di fuori del blocco di codice relativo al costrutto di selezione