25
1 Corso di Informatica (Programmazione) Lezione 10 (12 novembre 2008) Programmazione in Java: espressioni booleane e controllo del flusso (selezione)

1 Corso di Informatica (Programmazione) Lezione 10 (12 novembre 2008) Programmazione in Java: espressioni booleane e controllo del flusso (selezione)

Embed Size (px)

Citation preview

Page 1: 1 Corso di Informatica (Programmazione) Lezione 10 (12 novembre 2008) Programmazione in Java: espressioni booleane e controllo del flusso (selezione)

1

Corso di Informatica

(Programmazione)

Lezione 10 (12 novembre 2008)

Programmazione in Java:espressioni booleane e

controllo del flusso (selezione)

Page 2: 1 Corso di Informatica (Programmazione) Lezione 10 (12 novembre 2008) Programmazione in Java: espressioni booleane e controllo del flusso (selezione)

2

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);

Page 3: 1 Corso di Informatica (Programmazione) Lezione 10 (12 novembre 2008) Programmazione in Java: espressioni booleane e controllo del flusso (selezione)

3

Espressione booleanaUn’espressione booleana è 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

Page 4: 1 Corso di Informatica (Programmazione) Lezione 10 (12 novembre 2008) Programmazione in Java: espressioni booleane e controllo del flusso (selezione)

4

Operatori relazionali

Gli operatori relazionali confrontano due operandi numerici e ne determinano la relazione restituendo un valore di tipo boolean

Operatore

Descrizione

UsoRestituisce true

se…

== Uguale aop1 ==

op2op1 è uguale a op2

!= Diverso da op1 != op2 op1 è diverso da op2

< Minore di op1 < op2 op1 è minore di op2

> Maggiore di op1 > op2 op1 è maggiore di op2

<=Minore o uguale a

op1 <= op2

op1 è minore o uguale a di op2

>=Maggiore o uguale a

op1 >= op2

op1 è maggiore o uguale a di op2

Page 5: 1 Corso di Informatica (Programmazione) Lezione 10 (12 novembre 2008) Programmazione in Java: espressioni booleane e controllo del flusso (selezione)

5

Operatori relazionali (esempi)Esempio 1:

int x=3;

int y=4;

boolean b;

b=(x<=y);

System.out.println(b);

La stampa è true

Page 6: 1 Corso di Informatica (Programmazione) Lezione 10 (12 novembre 2008) Programmazione in Java: espressioni booleane e controllo del flusso (selezione)

6

Operatori relazionali (esempi)Esempio 2:

int x=3;

int y=4;

boolean b;

b=(x==y);

System.out.println(b);

La stampa è false

Page 7: 1 Corso di Informatica (Programmazione) Lezione 10 (12 novembre 2008) Programmazione in Java: espressioni booleane e controllo del flusso (selezione)

7

Operatori relazionali (esempi)Esempio 3:

int x=3;

int y=4;

boolean b;

b=(x!=y);

System.out.println(b);

La stampa è true

Page 8: 1 Corso di Informatica (Programmazione) Lezione 10 (12 novembre 2008) Programmazione in Java: espressioni booleane e controllo del flusso (selezione)

8

Operatori logici

Gli operatori logici operano su operandi booleani (espressione booleana, variabile booleana o valore booleano esplicito)

Operatore

Descrizione

UsoRestituisce true

se…

&&AND

abbreviatoop1 &&

op2op1 e op2 valgono

entrambi true

& AND op1 & op2 op1 e op2 valgono entrambi true

||OR

abbreviatoop1 || op2 almeno uno tra op1 e

op2 è true

| OR op1 | op2 almeno uno tra op1 e op2 è true

! NOT !op1 op1 è false

Page 9: 1 Corso di Informatica (Programmazione) Lezione 10 (12 novembre 2008) Programmazione in Java: espressioni booleane e controllo del flusso (selezione)

9

Operatori logici (esempio)

Esempio:

int x=3;

int y=4;

boolean b;

b=(x!=0 && x>y);

System.out.println(b);

La stampa è false

Page 10: 1 Corso di Informatica (Programmazione) Lezione 10 (12 novembre 2008) Programmazione in Java: espressioni booleane e controllo del flusso (selezione)

10

Operatori logiciLa 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.

Page 11: 1 Corso di Informatica (Programmazione) Lezione 10 (12 novembre 2008) Programmazione in Java: espressioni booleane e controllo del flusso (selezione)

11

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 codificadell’espressione… Quindi bisogna andare cauti con istruzioni che

potrebbero generare errori in runtime

Page 12: 1 Corso di Informatica (Programmazione) Lezione 10 (12 novembre 2008) Programmazione in Java: espressioni booleane e controllo del flusso (selezione)

12

Precedenza degli operatoriOperatori 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 >=

Page 13: 1 Corso di Informatica (Programmazione) Lezione 10 (12 novembre 2008) Programmazione in Java: espressioni booleane e controllo del flusso (selezione)

13

Precedenza degli operatori...

uguale a ==, diverso da !=

AND &

OR |

AND &&

OR ||

assegnamenti: =, +=, -=, *=, /=, %=

Page 14: 1 Corso di Informatica (Programmazione) Lezione 10 (12 novembre 2008) Programmazione in Java: espressioni booleane e controllo del flusso (selezione)

14

Controllo del flussoIl controllo del 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

Page 15: 1 Corso di Informatica (Programmazione) Lezione 10 (12 novembre 2008) Programmazione in Java: espressioni booleane e controllo del flusso (selezione)

15

SelezioneI 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.

Page 16: 1 Corso di Informatica (Programmazione) Lezione 10 (12 novembre 2008) Programmazione in Java: espressioni booleane e controllo del flusso (selezione)

16

Selezione a una viaLa selezione a 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>.

Page 17: 1 Corso di Informatica (Programmazione) Lezione 10 (12 novembre 2008) Programmazione in Java: espressioni booleane e controllo del flusso (selezione)

17

Selezione a una via (esempi)Esempio 1:

int x=3;

if(x > 2){

x++;

}

System.out.println(“x=“+x);

La stampa è “x=4”

Page 18: 1 Corso di Informatica (Programmazione) Lezione 10 (12 novembre 2008) Programmazione in Java: espressioni booleane e controllo del flusso (selezione)

18

Selezione a una via (esempi)Esempio 2:

int x=3;

if(x < 3){

x++;

}

System.out.println(“x=“+x);

La stampa è “x=3”

Page 19: 1 Corso di Informatica (Programmazione) Lezione 10 (12 novembre 2008) Programmazione in Java: espressioni booleane e controllo del flusso (selezione)

19

Selezione a due vieLa selezione a 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>, ...

Page 20: 1 Corso di Informatica (Programmazione) Lezione 10 (12 novembre 2008) Programmazione in Java: espressioni booleane e controllo del flusso (selezione)

20

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>.

Page 21: 1 Corso di Informatica (Programmazione) Lezione 10 (12 novembre 2008) Programmazione in Java: espressioni booleane e controllo del flusso (selezione)

21

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”

Page 22: 1 Corso di Informatica (Programmazione) Lezione 10 (12 novembre 2008) Programmazione in Java: espressioni booleane e controllo del flusso (selezione)

22

SelezioneNel 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);

Page 23: 1 Corso di Informatica (Programmazione) Lezione 10 (12 novembre 2008) Programmazione in Java: espressioni booleane e controllo del flusso (selezione)

23

Selezione annidataI 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{

...}

}

Page 24: 1 Corso di Informatica (Programmazione) Lezione 10 (12 novembre 2008) Programmazione in Java: espressioni booleane e controllo del flusso (selezione)

24

Selezione annidata (esempio)Esempio:

int x=3, y=4, z;if(x != y){

if(x < y)z=x;

elsez=y;

}else{

z=0;}System.out.println(“Z=“+z);

La stampa è “Z=3”

Page 25: 1 Corso di Informatica (Programmazione) Lezione 10 (12 novembre 2008) Programmazione in Java: espressioni booleane e controllo del flusso (selezione)

25

Scope di una variabileUna 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