Sei sulla pagina 1di 30

Operatori in Java

Il tipo boolean
Un valore boolean rappresenta una condizione di
verit o falsit
Una variabile di tipo boolean pu rappresentare un
valore a due stati
come un interrutore che acceso o spento

Le parole riservate (lettrerali costanti) true e


false sono gli unici valori ammessi per il tipo
boolean
boolean eseguito = false;
AA2005/06
Rosario Culmone

Programmazione
Operatori Java

Espressioni booleane
Sono espressioni che riportano un valore di
tipo booleano
Vengono usate principalmente per esprimere
le condizioni in istruzioni di controllo del
flusso
dato > 10
nome_1 < nome_2
(dato < 5) && !finito

AA2005/06
Rosario Culmone

Programmazione
Operatori Java

Espressioni booleane
In particolare sono espressioni in cui compaiono gli
operatori di Java di uguaglianza o relazionali, che
riportano valori booleani
==
!=
<
>
<=
>=

uguale
non uguale
minore
maggiore
minore o uguale
maggiore o uguale

Si noti la differenza tra loperatore di uguaglianza


(==) e loperatore di assegnamento (=)
AA2005/06
Rosario Culmone

Programmazione
Operatori Java

Operatori logici
Nelle espressioni booleane si possono usare
gli operatori logici
!
&&
||

not
and
or

che richiedono operandi di tipo boolean e


producono un risultato boolean
Loperatore logico not un operatore unario
(ha un solo operando)
Gli operatori logici and e or sono operatori
binari (richiedono due operandi)
AA2005/06
Rosario Culmone

Programmazione
Operatori Java

Operatore logico not


Loperatore logico NOT anche chiamato
negazione logica o complemento logico
Se una condizione booleana a vera, allora
!a falsa; se a falsa, allora !a vera
Le espressioni logiche usano quindi la tabella
di verit che segue
a

!a

true false
false true
AA2005/06
Rosario Culmone

Programmazione
Operatori Java

Gli operatori logici and e or


Lespressione logica and
a && b
vera se entrambi gli operandi a e b sono
veri, ed falsa altrimenti
Lespressione logica or
a || b
vera se a o b o entrambi sono veri, ed
falsa altrimenti
AA2005/06
Rosario Culmone

Programmazione
Operatori Java

Tavole di verit
Una tavola di verit mostra le possibili
combinazioni di termini di valori vero/falso
Poich && e || hanno due operandi
ciascuno, ci sono 4 possibili combinazioni
a

true true
true false
false true
false false
AA2005/06
Rosario Culmone

a && b

a || b

true
false
false
false

true
true
true
false

Programmazione
Operatori Java

Gli operatori logici


Gli operatori logici vengono usati come
condizioni in istruzioni di selezione o cicli per
formare espressioni complesse
if (totale < MAX && !trovato)
System.out.println ("Processing");

Gli operatori logici hanno relazioni di precedenza


tra loro e con altri operatori

AA2005/06
Rosario Culmone

Programmazione
Operatori Java

Espressioni booleane
Gli operatori logici possono essere combinati
per ottenere espressioni booleane complesse
Attenzione, da errore:
if ( 0 < numero < 1000)
if ( car == a || b)
Occorre scrivere:
if ( 0 < numero && numero < 1000)
if (car == a || car == b)
AA2005/06
Rosario Culmone

10

Programmazione
Operatori Java

Metodi predicativi
Un metodo predicativo restituisce un valore di tipo
boolean:
public class ContoBancario {
public boolean eScoperto() {
return this.saldo() < 0
}
}
Esempi predefiniti nella classe Character
isDigit, isLetter, isUpperCase

AA2005/06
Rosario Culmone

11

Programmazione
Operatori Java

Variabili booelane
Qualunque variabile che pu assumere solo
due valori pu essere dichiarata di tipo
boolean
private boolean coniugato;
if (coniugato)
e non
if (coniugato == true)
Si chiamano anche flag
AA2005/06
Rosario Culmone

12

Programmazione
Operatori Java

Tavole di verit
Le espressioni vengono valutate usando le
tavole di verit
(totale < MAX && !trovato)
totale < MAX
totale < MAX trovato !trovato && !trovato
false
false
true
true

AA2005/06
Rosario Culmone

false
true
false
true

true
false
true
false

13

false
false
true
false

Programmazione
Operatori Java

Legge di De Morgan
Espressioni complesse come:
if (!(0<numero && numero<1000))
non vero che 0 < numero e numero < 1000
ovvero numero non compreso tra 1 e 999
possono essere semplificate per essere rese
pi leggibili usando la legge di De Morgan
(1806-1871)
!(a && b) equivale a !a || !b
!(a || b) equivale a !a && !b
AA2005/06
Rosario Culmone

14

Programmazione
Operatori Java

Semplificazione con De Morgan


Lespressione
if (!(0<numero && numero<1000))
si semplifica
if (!(0<numero)||!(numero<1000))
e ancora
if ((0>=numero)||(numero>=1000))
if ((numero<=0)||(numero>=1000))

AA2005/06
Rosario Culmone

15

Programmazione
Operatori Java

Ancora su AND e OR
If (d != 0 && n / d>10) System.out.println(n/d);
Si stampa n/d, solo se d != 0; se d == 0 non
deve essere effettuato il calcolo
dellespressione n/d (AND forte &&)
If (d != 0 & n / d >10) System.out.println(n/d);
(AND debole &) se d == 0 non si calcola n/d!

AA2005/06
Rosario Culmone

16

Programmazione
Operatori Java

Ancora operatori
In Java ci sono altri operatori:
Operatori di incremento e decremento
Operatori di assegnamento
Operatori condizionali

AA2005/06
Rosario Culmone

17

Programmazione
Operatori Java

Operatori di incremento e
decremento
Gli operatori di incremento e decremento sono
operatori aritmetici unari
Loperatore di incremento (++) aggiunge 1 al suo
operando
Loperatore di decremento (--) sottrae 1 al suo
operando
Listruzione
cont++;
equivale allistruzione
cont = cont + 1;

AA2005/06
Rosario Culmone

18

Programmazione
Operatori Java

Operatori di incremento e
decremento
Operatori di incremento e decremento
possono essere usati in forma prefissa (prima
della variabile) o in forma postfissa (dopo la
variabile)
Quando si usano soli in una istruzione, le due
forme sono equivalenti.
cont++; equivale a ++cont;

AA2005/06
Rosario Culmone

19

Programmazione
Operatori Java

Operatori di incremento e
decremento
In unespressione, le due forme possono
avere effetti molto diversi
Sempre la variabile viene aumentata o
decrementata
Ma il valore usato nellespressione dipende
dalla forma prefissa o postfissa:
espressione
cont++
++cont
cont---cont
AA2005/06
Rosario Culmone

operazione
sulla variabile
somma 1
somma 1
sottrae 1
sottrae 1
20

valore usato
nellespressione
precedente
nuovo
precedente
nuovo
Programmazione
Operatori Java

Operatori di incremento e
decremento
se cont contiene attualmente il valore 45, allora
totale = cont++;

assegna 45 a totale e 46 a cont


se cont contiene attualmente il valore 45, allora
totale = ++cont;

assegna il valore 46 sia a totale sia a cont


se cont contiene 45, cosa conterr dopo
la seguente operazione?
cont = ++cont;

AA2005/06
Rosario Culmone

21

Programmazione
Operatori Java

Operatori di assegnamento
Spesso eseguiamo operazioni su una
variabile, quindi archiviamo il nuovo risultato
nella locazione della variabile
Alcuni operatori di assegnamento consentono
questo processo
Esempio:
num += cont;

equivale a
num = num + cont;

AA2005/06
Rosario Culmone

22

Programmazione
Operatori Java

Operatori di assegnamento
Gli operatori di assegnamento
operatore
+=
-=
*=
/=
%=

AA2005/06
Rosario Culmone

esempio
x
x
x
x
x

+=
-=
*=
/=
%=

y
y
y
y
y

23

equivale a
x
x
x
x
x

=
=
=
=
=

x
x
x
x
x

+
*
/
%

y
y
y
y
y

Programmazione
Operatori Java

Operatori di assegnamento
Loperando di destra di un operatore di
assegnamento pu essere unespressione
Lespressione di destra viene valutata poi il risultato
opportunamente computato con il precedente valore
della variabile
Nellistruzione
risultato /= (totale-MIN) % num;

si calcola prima il valore dellespressione


((totale-MIN) % num);

quindi si valuta risultato / valore_espressione


e lo si assegna a risultato
AA2005/06
Rosario Culmone

24

Programmazione
Operatori Java

Operatore condizionale
Loperatore condizionale valuta una condizione
booleana che determina quale espressione, tra due
possibili, valutare
Il risultato dellespressione selezionata diventa il
risultato delloperatore condizionale
condizione ? Espressione_1 : espressione_2

Se condizione vera, allora viene valutata


espressione_1 altrimenti si valuta espressione_2

AA2005/06
Rosario Culmone

25

Programmazione
Operatori Java

Operatore condizionale
Loperatore condizionale simile allistruzione if-else,
tranne che produce il valore di unespressione
maggiore = (num1 > num2) ? num1 : num2;
se num1 maggiore di num2, allora a maggiore
viene assegnato num1 altrimenti num2
Loperatore condizionale un operatore ternario, cio
richiede tre operandi

AA2005/06
Rosario Culmone

26

Programmazione
Operatori Java

Operatore condizionale
System.out.println
(Il resto di " + cont +
(cont == 1) ? lira : lire");
se cont 1, allora si stampa:
Il resto di 1 lira.
Per qualunque altro valore di cont (es.
10), si stampa:
Il resto di 10 lire
AA2005/06
Rosario Culmone

27

Programmazione
Operatori Java

Precedenza operatori
Gli operatori Java hanno una precedenza
assegnata, che occorre conoscere
Tra gli operatori di massima precedenza ci
sono le () per la valutazione dei parametri,
loperatore dot e gli operatori di autoincremento e auto-decremento
Tra quelli di minima ci sono gli assegnamenti

AA2005/06
Rosario Culmone

28

Programmazione
Operatori Java

Associativit degli operatori


La maggior parte degli operatori binari sono
associativi a sinistra
Vengono valutati da sinistra a destra
a + b + c + d + e equivale a
(a + b) + c) + d) + e) e non a
a + (b + (c + (d + e)))

Loperatore di assegnamento associativo a


destra
Viene valutato da destra a sinistra

AA2005/06
Rosario Culmone

29

Programmazione
Operatori Java

Tabella delle priorit

operatori postfissi
operatori unari
instanze e cast
aritmetici
aritmetici
di relazione
uguaglianza
AND
OR
condizionale
Assegnamento
AA2005/06
Rosario Culmone

[] . (params) expr++ expr


++expr --expr +expr -expr !
new (type)expr
*/%
(da sx a dx)
+< > <= >=
== !=
&&
||
?:
= += -= *= /= %= &= |= (da dx a sx)
30

Programmazione
Operatori Java