Capitolo 5 Decisioni Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon,...

64
Capitolo 5 Decisioni Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl

Transcript of Capitolo 5 Decisioni Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon,...

Page 1: Capitolo 5 Decisioni Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies.

Capitolo 5Decisioni

Lucidi relativi al volume:

Java – Guida alla programmazione James Cohoon, Jack Davidson

Copyright © 2004 - The McGraw-Hill Companies srl

Page 2: Capitolo 5 Decisioni Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies.

Java – Guida alla programmazione - James Cohoon, Jack Davidson

Copyright © 2004 - The McGraw-Hill Companies srl

Nozioni di base Le soluzioni dei problemi mostrate finora sono dirette

Eseguono le stesse istruzioni ad ogni esecuzione del programma

public class DisplayForecast // main(): punto di ingresso per l'applicazione

public static void main(String[] args){ System.out.print("I think there is a world"); System.out.print(" market for maybe five "); System.out.println("computers. “); System.out.print(" Thomas Watson, IBM, “); System.out.println("1943.");

}}

Page 3: Capitolo 5 Decisioni Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies.

Java – Guida alla programmazione - James Cohoon, Jack Davidson

Copyright © 2004 - The McGraw-Hill Companies srl

Nozioni di base Per la soluzione generale dei problemi servono maggiori

capacità La capacità di controllare quali istruzioni vengono

eseguite La capacità di controllare quanto spesso viene eseguita

un'istruzione

Per prima cosa ci concentreremo sul controllo di quali istruzioni vengono eseguite

Java fornisce i costrutti condizionali if e switch per controllare se un elenco di istruzioni viene eseguito I costrutti if utilizzano espressioni logiche per determinare

il corso dell'azione

L'esame inizia dalle espressioni logiche

Page 4: Capitolo 5 Decisioni Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies.

Java – Guida alla programmazione - James Cohoon, Jack Davidson

Copyright © 2004 - The McGraw-Hill Companies srl

Espressioni logiche Il ramo della matematica che si occupa delle espressioni

logiche è l'algebra di Boole Sviluppata dal matematico britannico George Boole

Page 5: Capitolo 5 Decisioni Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies.

Java – Guida alla programmazione - James Cohoon, Jack Davidson

Copyright © 2004 - The McGraw-Hill Companies srl

Espressioni logiche Un'espressione logica presenta il valore logico true o false

Alcune espressioni i cui valori sono true logici L'anno 2004 è bisestile Un metro equivale a 100 centimetri

Alcune espressioni i cui valori sono false logici Un triangolo ha quattro lati L'area del quadrato è sempre uguale al doppio del suo

perimetro

Page 6: Capitolo 5 Decisioni Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies.

Java – Guida alla programmazione - James Cohoon, Jack Davidson

Copyright © 2004 - The McGraw-Hill Companies srl

Espressioni logiche Esistono tre operatori logici principali per la manipolazione

dei valori logici AND logico OR logico NOT logico

Gli operatori funzionano come previsto

Page 7: Capitolo 5 Decisioni Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies.

Java – Guida alla programmazione - James Cohoon, Jack Davidson

Copyright © 2004 - The McGraw-Hill Companies srl

Tabelle della verità Le tabelle della verità sono utilizzate per fornire specifiche

formali degli operatori “Funzionano come previsto” lascia una certa ambiguità di

interpretazione Jim sta sorridendo o Patty sta sorridendo

Jim e Patty possono sorridere entrambi? Tabelle della verità

Elenca tutte le combinazioni dei valori degli operandi e il risultato dell'operazione per ogni combinazione

p q p and q

False False FalseFalse True FalseTrue False FalseTrue True True

Page 8: Capitolo 5 Decisioni Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies.

Java – Guida alla programmazione - James Cohoon, Jack Davidson

Copyright © 2004 - The McGraw-Hill Companies srl

Tabelle della verità di OR e NOT

p q p or q

False False FalseFalse True TrueTrue False TrueTrue True True p not q

False TrueTrue False

Page 9: Capitolo 5 Decisioni Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies.

Java – Guida alla programmazione - James Cohoon, Jack Davidson

Copyright © 2004 - The McGraw-Hill Companies srl

Algebra di Boole Può creare espressioni logiche complesse combinando

semplici espressioni logiche

not (p and q)

p q p and q not (p and q)

False False False TrueFalse True False TrueTrue False False TrueTrue True True False

Page 10: Capitolo 5 Decisioni Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies.

Java – Guida alla programmazione - James Cohoon, Jack Davidson

Copyright © 2004 - The McGraw-Hill Companies srl

Leggi di DeMorgan not (p and q) equivale a (not p) or (not q)

( not p) or p q p and q not (p and q) ( not p) (not q) ( not q)

False False False True True True TrueFalse True False True True False TrueTrue False False True False True TrueTrue True True False False False False

Page 11: Capitolo 5 Decisioni Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies.

Java – Guida alla programmazione - James Cohoon, Jack Davidson

Copyright © 2004 - The McGraw-Hill Companies srl

Leggi di DeMorgan not (p or q) equivale a (not p) and (not q)

( not p) and p q p or q not (p or q) ( not p) (not q) ( not q)

False False False True True True TrueFalse True False False True False FalseTrue False False False False True FalseTrue True True False False False False

Page 12: Capitolo 5 Decisioni Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies.

Java – Guida alla programmazione - James Cohoon, Jack Davidson

Copyright © 2004 - The McGraw-Hill Companies srl

Un tipo boolean Java dispone del tipo logico boolean

Il tipo boolean usa due costanti letterali true false

Operatori L'operatore and è && L'operatore or è || L'operatore not è !

Page 13: Capitolo 5 Decisioni Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies.

Java – Guida alla programmazione - James Cohoon, Jack Davidson

Copyright © 2004 - The McGraw-Hill Companies srl

Definizione delle variabili boolean Le variabili boolean locali non sono inizializzate per impostazione

predefinita

boolean isWhitespace;boolean receivedAcknowledgement;boolean haveFoundMissingLink;

-isWhitespace

-receivedAcknowledgement

-haveFoundMissingLink

Page 14: Capitolo 5 Decisioni Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies.

Java – Guida alla programmazione - James Cohoon, Jack Davidson

Copyright © 2004 - The McGraw-Hill Companies srl

Definizione delle variabili boolean Variabili boolean locali con inizializzazione

boolean canProceed = true;boolean preferCyan = false;boolean completedSecretMission = true;

truecanProceed

falsepreferCyan

truecompletedSecretMission

Page 15: Capitolo 5 Decisioni Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies.

Java – Guida alla programmazione - James Cohoon, Jack Davidson

Copyright © 2004 - The McGraw-Hill Companies srl

Altri operatori Operatori di uguaglianza == e !=

Operatore == Restituisce true se gli operandi hanno lo stesso valore,

altrimenti restituisce false Operatore !=

Restituisce true se gli operandi hanno valori diversi, altrimenti restituisce false

Gli operatori funzionano con tutti i tipi di valori

Page 16: Capitolo 5 Decisioni Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies.

Java – Guida alla programmazione - James Cohoon, Jack Davidson

Copyright © 2004 - The McGraw-Hill Companies srlValutazione delle espressioni boolean Supporre

boolean p = true;boolean q = false;boolean r = true;boolean s = false;

Qual è il valore dip p && s !s p == q q q != r p && r r == s q || s q != s

Page 17: Capitolo 5 Decisioni Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies.

Java – Guida alla programmazione - James Cohoon, Jack Davidson

Copyright © 2004 - The McGraw-Hill Companies srlValutazione delle espressioni boolean Supporre

int i = 1;int j = 2;int k = 2;char c = '#';char d = '%';char e = '#';

Qual è il valore dij == k i != ki == j j != kc == e d != ec == d c != e

Page 18: Capitolo 5 Decisioni Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies.

Java – Guida alla programmazione - James Cohoon, Jack Davidson

Copyright © 2004 - The McGraw-Hill Companies srl

Attenzione ai valori in virgola mobile Considerare

double a = 1;double b = 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1double c = 9999999999999999;

Due espressioni true! a == b b != c

Due espressioni false!a != b b == c

Il problema sta nella precisione dei tipi in virgola mobile Preferire gli operatori di ordinamento per la vicinanza

Page 19: Capitolo 5 Decisioni Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies.

Java – Guida alla programmazione - James Cohoon, Jack Davidson

Copyright © 2004 - The McGraw-Hill Companies srl

Operatori di ordinamento Java fornisce operatori di ordinamento per i tipi primitivi

Quattro operatori di ordinamento, <, >, <= e >= Corrispondono agli operatori matematici , , e Š

Insieme gli operatori di uguaglianza e ordinamento sono detti operatori relazionali

False è minore di true

Page 20: Capitolo 5 Decisioni Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies.

Java – Guida alla programmazione - James Cohoon, Jack Davidson

Copyright © 2004 - The McGraw-Hill Companies srlValutazione delle espressioni boolean Supporre

int i = 1;int j = 2;int k = 2;

Qual è il valore dii < jj < ki <= kj >= ki >= k

Page 21: Capitolo 5 Decisioni Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies.

Java – Guida alla programmazione - James Cohoon, Jack Davidson

Copyright © 2004 - The McGraw-Hill Companies srl

Valori Unicode I confronti tra caratteri sono basati sui loro valori Unicode

I caratteri hanno l'ordine previsto '0', '1', … '9' Il carattere '0' ha codifica 48 Il carattere '1' ha codifica 49 e così via.

Le lettere maiuscole 'A', 'B', … 'Z' seguono l'ordine previsto Il carattere 'A' ha codifica 65, il carattere 'B' ha codifica 66

e così via.

Le lettere maiuscole 'A', 'B', … 'Z' seguono l'ordine previsto Il carattere 'a' ha codifica 97 Il carattere 'b' ha codifica 98 e così via.

Page 22: Capitolo 5 Decisioni Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies.

Java – Guida alla programmazione - James Cohoon, Jack Davidson

Copyright © 2004 - The McGraw-Hill Companies srlValutazione delle espressioni boolean Supporre

char c = '2';char d = '3';char e = '2';

Qual è il valore dic < dc < ec <= ed >= ec >= e

Page 23: Capitolo 5 Decisioni Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies.

Java – Guida alla programmazione - James Cohoon, Jack Davidson

Copyright © 2004 - The McGraw-Hill Companies srl

Precedenza degli operatori Dal più alto al più basso

Parentesi Operatori unari Operatori di moltiplicazione Operatori di somma Ordinamento relazionale Uguaglianza relazionale AND logico OR logico Assegnazione

Page 24: Capitolo 5 Decisioni Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies.

Java – Guida alla programmazione - James Cohoon, Jack Davidson

Copyright © 2004 - The McGraw-Hill Companies srl

Costrutti condizionali Forniscono

Capacità di controllare se viene eseguito un elenco di istruzioni

Due costrutti

Istruzione if if if-else if-else-if

Istruzione switch

Page 25: Capitolo 5 Decisioni Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies.

Java – Guida alla programmazione - James Cohoon, Jack Davidson

Copyright © 2004 - The McGraw-Hill Companies srl

Istruzione if di base Sintassi

if (espressione) azione

Se espressione è true viene eseguita azione

Azione è una singola istruzione o un gruppo di istruzioni tra parentesi graffe

Per noi sarà sempre un gruppo di istruzioni tra parentesi graffe

Espressione

azione

true false

Page 26: Capitolo 5 Decisioni Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies.

Java – Guida alla programmazione - James Cohoon, Jack Davidson

Copyright © 2004 - The McGraw-Hill Companies srl

Esempio

if (value < 0) { value = -value;}

Value < 0

Value = -Value

true false

Is our numbernegative?

If Value is notless than zero

then our numberis fine as is

If Value is less thanzero then we needto update its value

to that of its additiveinverse

Our number is nowdefinitely

nonnegative

Il numero è negativo?

Se Value è inferiore a zero,

il numero va bene così

Se Value è inferiore a zero, occorre

aggiornare il valore con l’inverso dell’additivo

Il numero è ora sicuramente non

negativo

Page 27: Capitolo 5 Decisioni Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies.

Java – Guida alla programmazione - James Cohoon, Jack Davidson

Copyright © 2004 - The McGraw-Hill Companies srl

Ordinamento di due valoriSystem.out.print("Enter an integer number: ");int value1 = Integer.parseInt(stdin.readLine());System.out.print("Enter another integer number: ");int value2 = Integer.parseInt(stdin.readLine());

// riorganizza i numeri, se necessarioif (value2 < value1) {

// i valori non sono ordinatiint rememberValue1 = value1;value1 = value2;value2 = rememberValue1;

}

// visualizza i valoriSystem.out.println("The numbers in sorted order are "

+ value1 + " and then " + value2);

Che cosa accade se l'utente inserisce 11 e 28?

Che cosa accade se l'utente inserisce 11 e 4?

Page 28: Capitolo 5 Decisioni Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies.

value2 < value1

int rememberValue1 = value1 value1 = value2 value2 = rememberValue1

true false

Are the numbers outof order

Rearrange value1 andvalue2 to put their

values in the properorder

The numbers were initially inorder

The numbers were rearranged intothe proper order

The numbers are in order

Semantica di if I numeri non sono in ordine?

Riordina value1 e value2 per mettere nell'ordine corretto i

valori

I numeri sono stati messi nell'ordine corretto

I numeri erano già in ordine

I numeri sono in ordine

Page 29: Capitolo 5 Decisioni Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies.

Java – Guida alla programmazione - James Cohoon, Jack Davidson

Copyright © 2004 - The McGraw-Hill Companies srlPerché utilizzare sempre le parentesi graffe Qual è l'output?

int m = 5;int n = 10;

if (m < n) ++m;++n;

System.out.println(" m = " + m + " n = " n);

Page 30: Capitolo 5 Decisioni Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies.

Java – Guida alla programmazione - James Cohoon, Jack Davidson

Copyright © 2004 - The McGraw-Hill Companies srl

L'istruzione if-else Sintassi

if (espressione) azione1

else azione2

Se espressione è true esegue azione1

altrimenti esegue azione2

Le azioni sono una singola istruzione o un elenco di istruzioni tra parentesi graffe

Espressione

azione1azione2

true false

Page 31: Capitolo 5 Decisioni Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies.

Java – Guida alla programmazione - James Cohoon, Jack Davidson

Copyright © 2004 - The McGraw-Hill Companies srl

Trovare il massimo di due valori

System.out.print("Enter an integer number: ");int value1 = Integer.parseInt(stdin.readLine());System.out.print("Enter another integer number: ");int value2 = Integer.parseInt(stdin.readLine());

int maximum;if (value1 < value2) // value2 è maggiore?? maximum = value2; // sì: value2 è maggiore}else // (value1 >= value2) maximum = value1; // no: value2 non è maggiore}System.out.println("The maximum of " + value1

+ " and " + value2 + " is " + maximum);

Page 32: Capitolo 5 Decisioni Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies.

Java – Guida alla programmazione - James Cohoon, Jack Davidson

Copyright © 2004 - The McGraw-Hill Companies srl

Trovare il massimo di due valori

value1 < value2

maximum = value2 maximum = value1

true false

Is value2 larger than value1

Yes, it is . So value2 islarger than value1. In

this case, maximum isset to value2

No, its not. So value1is at least as large asvalue2. In this case,maximum is set to

value1

Either case, maximum is setcorrectly

value2 è maggiore di value1?

Sì, lo è. Dunque, value2 è maggiore di value1. In questo caso, maximum

viene impostato su value2

No, non lo è. Dunque, value1 è grande almeno

quanto value2. In questo caso, maximum

viene impostato su value2

maximum viene impostata correttamente in entrambi

i casi

Page 33: Capitolo 5 Decisioni Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies.

Java – Guida alla programmazione - James Cohoon, Jack Davidson

Copyright © 2004 - The McGraw-Hill Companies srl

Perché utilizzare gli spazi vuoti Che cosa fa il codice seguente?

System.out.print("Enter an integer number: ");int value1 = Integer.parseInt(stdin.readLine());System.out.print("Enter another integer number: ");int value2 = Integer.parseInt(stdin.readLine());if (value2 < value1) {int rememberValue1 = value1;value1 = value2;value2 = rememberValue1;}System.out.println("The numbers in sorted order are "+ value1 + " and then " + value2);

Page 34: Capitolo 5 Decisioni Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies.

Java – Guida alla programmazione - James Cohoon, Jack Davidson

Copyright © 2004 - The McGraw-Hill Companies srl

Verifica dell'uguaglianza tra oggetti Considerare

System.out.print("Enter an integer number: ");int n1 = Integer.parseInt(stdin.readLine());System.out.print("Enter another integer number: ");int n2 = Integer.parseInt(stdin.readLine());

if (n1 == n2) {System.out.println("Same");

}else{

System.out.println(“Different");} Qual è l'output se l'utente inserisce 88 in entrambi i

casi?

Qual è l'output se l'utente inserisce 88 e 3?

Page 35: Capitolo 5 Decisioni Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies.

Java – Guida alla programmazione - James Cohoon, Jack Davidson

Copyright © 2004 - The McGraw-Hill Companies srl

Verifica dell'uguaglianza tra oggetti Considerare

System.out.print("Enter a string: ");String s1 = stdin.readLine();System.out.print("Enter another string: ");String s2 = stdin.readLine();

if (s1 == s2) {System.out.println("Same");

}else{

System.out.println("Different");} Qual è l'output se l'utente inserisce "pastel" in

entrambi i casi?

Page 36: Capitolo 5 Decisioni Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies.

Java – Guida alla programmazione - James Cohoon, Jack Davidson

Copyright © 2004 - The McGraw-Hill Companies srl

Verifica dell'uguaglianza tra oggetti Quando viene eseguito

System.out.print("Enter a string: ");String s1 = stdin.readLine();System.out.print("Enter another string: ");String s2 = stdin.readLine();

La memoria appare così

Come risultato, indipendentemente da ciò che viene inserito s1 e s2 non sono uguali Fanno riferimento a oggetti diversi

"pastel"s1

"pastel"s2

Page 37: Capitolo 5 Decisioni Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies.

Java – Guida alla programmazione - James Cohoon, Jack Davidson

Copyright © 2004 - The McGraw-Hill Companies srlProva degli operatori per l'uguaglianza Considerare

System.out.print("Enter a string: ");String s1 = stdin.readLine();System.out.print("Enter another string: ");String s2 = stdin.readLine();

if (s1.equals(s2)) {System.out.println("Same");

}else{

System.out.println("Different");}

Verifica se s1 e s2 rappresentano lo stesso oggetto

Tutti gli oggetti hanno un metodo equals(). La loro implementazione è specifica per la classe. Il metodo String equals() – come molti altri – verifica l'equivalenza nella rappresentazione

Page 38: Capitolo 5 Decisioni Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies.

Java – Guida alla programmazione - James Cohoon, Jack Davidson

Copyright © 2004 - The McGraw-Hill Companies srl

Alcuni metodi utili della classe String isDigit()

Verifica se il carattere è numerico isLetter()

Verifica se il carattere è alfabetico isLowerCase()

Verifica se il carattere è alfabetico minuscolo isWhiteSpace()

Verifica se il carattere è un carattere di spazio, tabulazione, avanzamento riga o nuova riga

Page 39: Capitolo 5 Decisioni Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies.

Java – Guida alla programmazione - James Cohoon, Jack Davidson

Copyright © 2004 - The McGraw-Hill Companies srl

Alcuni metodi utili della classe String isUpperCase()

Verifica se il carattere è alfabetico maiuscolo toLowerCase()

Se il carattere è alfabetico viene restituito l'equivalente minuscolo del carattere, altrimenti viene restituito il carattere

toUpperCase() Se il carattere è alfabetico viene restituito l'equivalente

maiuscolo del carattere, altrimenti viene restituito il carattere

Page 40: Capitolo 5 Decisioni Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies.

Java – Guida alla programmazione - James Cohoon, Jack Davidson

Copyright © 2004 - The McGraw-Hill Companies srl

If-else-if Considerare

if (number == 0) {System.out.println("zero");

}else{

if (number > 0) { System.out.println("positive");

}else{ System.out.println("negative");}

}

Page 41: Capitolo 5 Decisioni Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies.

Java – Guida alla programmazione - James Cohoon, Jack Davidson

Copyright © 2004 - The McGraw-Hill Companies srl

If-else-if Meglio

if (number == 0) {System.out.println("zero");

}else if (number > 0) {

System.out.println("positive");}else{

System.out.println("negative");}

Stessi risultati del segmento precedente, ma questo segmento esprime meglio il significato di cosa accade

Page 42: Capitolo 5 Decisioni Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies.

Java – Guida alla programmazione - James Cohoon, Jack Davidson

Copyright © 2004 - The McGraw-Hill Companies srl

Ordinamento di tre valori Per l'ordinamento dei valori n1, n2 e n3 esistono sei possibili

ordinamenti n1 n2 n3 n1 n3 n2 n2 n1 n3 n2 n3 n1 n3 n1 n2 n3 n2 n1

Si supponga che s1, s2, s3 deve essere una versione ordinata di n1, n2 e n3

Page 43: Capitolo 5 Decisioni Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies.

Java – Guida alla programmazione - James Cohoon, Jack Davidson

Copyright © 2004 - The McGraw-Hill Companies srl

Ordinamento di tre valoriif ((n1 <= n2) && (n2 <= n3)) // n1 <= n2 <= n2

s1 = n1; s2 = n2; s3 = n3;}else if ((n1 <= n3) && (n3 <= n2)) // n1 <= n3 <= n2

s1 = n1; s2 = n3; s3 = n2;}else if ((n2 <= n1) && (n1 <= n3)) // n2 <= n1 <= n3

s1 = n2; s2 = n1; s3 = n3;}else if ((n2 <= n3) && (n3 <= n1)) // n2 <= n3 <= n1

s1 = n2; s2 = n3; s3 = n1;}else if ((n3 <= n1) && (n1 <= n2)) // n3 <= n1 <= n2

s1 = n3; s2 = n1; s3 = n2;}else // n3 <= n2 <= n1

s1 = n3; s2 = n2; s3 = n1;}

Page 44: Capitolo 5 Decisioni Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies.

Java – Guida alla programmazione - James Cohoon, Jack Davidson

Copyright © 2004 - The McGraw-Hill Companies srl

Istruzione switch Gli ingegneri del software sono spesso alle prese con attività

di programmazione che richiedono azioni dipendenti dal valore di espressioni intere È possibile utilizzare il costrutto if-else-if

Confrontare separatamente l'espressione desiderata con un particolare valore Se l'espressione e il valore sono uguali viene

eseguita l'azione appropriata

Visto che tali attività di programmazione avvengono spesso Java include un'istruzione switch

L'attività è spesso più leggibile con switch che con if-else-if

Page 45: Capitolo 5 Decisioni Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies.

Java – Guida alla programmazione - James Cohoon, Jack Davidson

Copyright © 2004 - The McGraw-Hill Companies srl

Istruzione switch

switch ( SwitchExpression ) {

case CaseExpression1 :Action1 ;

case CaseExpression2 :Action2 ;

...

case CaseExpressionn :Actionn;

default :Actionn+1 ;

}

Constantintegral

expressionJ avastatements

Integral expression tobe matched with a case

expression

Espressione intera da associare a

un'espressione case

Istruzioni

Java

Espressionecostante

intera

Page 46: Capitolo 5 Decisioni Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies.

Java – Guida alla programmazione - James Cohoon, Jack Davidson

Copyright © 2004 - The McGraw-Hill Companies srl

Verifica delle vocali

switch (ch) {case 'a': case 'A':case 'e': case 'E':case 'i': case 'I':case 'o': case 'O':case 'u': case 'U':

System.out.println("vowel“);break;

default: System.out.println("not a vowel“);

}

break provoca l'uscita da switch

Gestisce tutti gli altri casi

Page 47: Capitolo 5 Decisioni Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies.

Java – Guida alla programmazione - James Cohoon, Jack Davidson

Copyright © 2004 - The McGraw-Hill Companies srl

Elaborazione di una richiesta

System.out.print("Enter a number: ");int n1 = Integer.parseInt(stdin.readLine());

System.out.print("Enter another number: ");int n2 = Integer.parseInt(stdin.readLine());

System.out.print("Enter desired operator: ");char operator = stdin.readLine().charAt(0);

switch (operator) {case '+' : System.out.println(n1 + n2); break;case '-' : System.out.println(n1 - n2); break;case '*' : System.out.println(n1 * n2); break;case '/' : System.out.println(n1 / n2); break;default: System.out.println(“Illegal request“);

}

Page 48: Capitolo 5 Decisioni Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies.

Java – Guida alla programmazione - James Cohoon, Jack Davidson

Copyright © 2004 - The McGraw-Hill Companies srl

Valutazione abbreviata Il valore di un'espressione logica può essere noto prima che

siano stati considerati tutti gli operandi Se l'operando sinistro di && è false, il valore deve essere

false Se l'operando destro di || è true, il valore deve essere true

Java utilizza queste proprietà per rendere efficienti le operazioni logiche Valuta l'operando sinistro prima di valutare l'operando

destro Se il valore dell'operatore è determinato dall'operando

sinistro, allora l'operando destro non viene valutato L'operazione è abbreviata

Page 49: Capitolo 5 Decisioni Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies.

Java – Guida alla programmazione - James Cohoon, Jack Davidson

Copyright © 2004 - The McGraw-Hill Companies srl

Valutazione abbreviata La valutazione abbreviata è utilizzata quando qualche

proprietà deve essere true per poter valutare qualche altra espressione

Si supponga di voler sapere se scoreSum diviso per nbrScores è maggiore di value La condizione può essere valutata solo se nbrScores non è

zero

L'espressione seguente rappresenta correttamente la condizione

(nbrScores != 0) && ((scoreSum / nbrScores) > value)

Page 50: Capitolo 5 Decisioni Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies.

Java – Guida alla programmazione - James Cohoon, Jack Davidson

Copyright © 2004 - The McGraw-Hill Companies srl

ColoredTriangle Nozioni di base

I triangoli sono una forma importante nel mondo della grafica informatica

Quando vengono create le animazioni a computer, le scene vengono generalmente scomposte in un insieme di triangoli colorati

Specifica informale Rappresenta un triangolo colorato nello spazio

bidimensionale Fornisce i costruttori e i metodi previsti dall'utente

Page 51: Capitolo 5 Decisioni Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies.

Java – Guida alla programmazione - James Cohoon, Jack Davidson

Copyright © 2004 - The McGraw-Hill Companies srl

ColoredTriangle - vedere il gatto

Page 52: Capitolo 5 Decisioni Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies.

Java – Guida alla programmazione - James Cohoon, Jack Davidson

Copyright © 2004 - The McGraw-Hill Companies srl

ColoredTriangle - costruttori previsti Costruzione predefinita

Costruisce una rappresentazione del triangolo anche se non sono forniti valori di attributo espliciti

public ColoredTriangle()

Costruzione specifica Costruisce la rappresentazione di un triangolo da valori di

attributo espliciti

public ColoredTriangle(Point v1, Point v2, Point v3,Color c)

Page 53: Capitolo 5 Decisioni Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies.

Java – Guida alla programmazione - James Cohoon, Jack Davidson

Copyright © 2004 - The McGraw-Hill Companies srlColoredTriangle - comportamenti previsti Fornire l'area

Restituire l'area del triangolo associato

public double getArea()

Fornire il perimetro Restituire il perimetro del triangolo associato

public double getPerimeter()

Accedere a un punto finale Fornire un punto finale richiesto del triangolo associato

public Point getPoint(int i)

Page 54: Capitolo 5 Decisioni Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies.

Java – Guida alla programmazione - James Cohoon, Jack Davidson

Copyright © 2004 - The McGraw-Hill Companies srlColoredTriangle - comportamenti previsti Accedere al colore

Fornire il colore del triangolo associato

public Point getColor()

Impostare un punto finale Impostare un particolare punto finale del triangolo

associato su un dato valore

public void setPoint(int i, Point p)

Impostare il colore del triangolo Impostare il colore del triangolo associato su un dato

valore

public void setColor(Color c)

Page 55: Capitolo 5 Decisioni Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies.

Java – Guida alla programmazione - James Cohoon, Jack Davidson

Copyright © 2004 - The McGraw-Hill Companies srlColoredTriangle - comportamenti previsti Rappresentare

Disegnare il triangolo associato in un dato contesto grafico

public void paint(Graphics g)

Verificare l'uguaglianza Indicare se il triangolo associato è equivalente a un dato

triangolo

public boolean equals(Object v)

Rappresentazione stringa Fornire una rappresentazione di testo degli attributi del

triangolo associato

public String toString()

Page 56: Capitolo 5 Decisioni Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies.

Java – Guida alla programmazione - James Cohoon, Jack Davidson

Copyright © 2004 - The McGraw-Hill Companies srl

ColoredTriangle - attributi Per implementare i comportamenti

È sufficiente la conoscenza del colore del triangolo e dei tre punti finali

Il punto finale può essere rappresentato utilizzando due valori int per posizione o come Point Point sembra più naturale

private Color color Colore del triangolo associato

private Point p1 Fa riferimento al primo punto del triangolo associato

private Point p2 Fa riferimento al secondo punto del triangolo associato

private Point p3 Fa riferimento al terzo punto del triangolo associato

Page 57: Capitolo 5 Decisioni Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies.

Java – Guida alla programmazione - James Cohoon, Jack Davidson

Copyright © 2004 - The McGraw-Hill Companies srlCostruttore predefinito - implementazione

// ColoredTriangle(): default constructorpublic ColoredTriangle() {Point a = new Point(1, 1);Point b = new Point(2, 2);Point c = new Point(3, 3);setPoint(1, a);setPoint(2, b);setPoint(3, c);setColor(Color.BLACK);

}

Create endpoint values

Copy desired endpoint values to data fields

Copy desired color to data fields

Crea i valori per i vertici

Copia i valori dei vertici desiderati nei campi dati

Copia nei campi dati il colore desiderato

Page 58: Capitolo 5 Decisioni Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies.

Java – Guida alla programmazione - James Cohoon, Jack Davidson

Copyright © 2004 - The McGraw-Hill Companies srlImplementazione - funzione di accesso getPoint()// getPoint(): funzione di accesso al punto finalepublic Point getPoint(int i)

if (i == 1) return p1;

}else if (i == 2)

return p2;}else if (i == 3)

return p3;}else

System.output.println("Unexpected endpoint access: “

+ i);System.exit(i);return null;

}}

Non sarà eseguita, ma il compilatore desidera che ogni percorso di esecuzione termini con return

Page 59: Capitolo 5 Decisioni Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies.

Java – Guida alla programmazione - James Cohoon, Jack Davidson

Copyright © 2004 - The McGraw-Hill Companies srlImplementazione - facilitatore toString()

// toString(): facilitatore stringapublic String toString()

Point v1 = getPoint(1);Point v2 = getPoint(2);Point v3 = getPoint(3);Color c = getColor();

return "ColoredRectangle[" + v1 + ", " + v2 + ", " + v3+ ", " + c + "]";

}

Standard per includere il nome di classe quando l'uso previsto è per il debug

Page 60: Capitolo 5 Decisioni Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies.

Java – Guida alla programmazione - James Cohoon, Jack Davidson

Copyright © 2004 - The McGraw-Hill Companies srlImplementazione - facilitatore toString()

Point a = new Point(2,1),Point b = new Point(1,2)Point c = new Point(3,2);ColoredTriangle u = new ColoredTriangle(a, b, c, Color.RED);System.out.println(u); // mostra la versione stringa di u

ColoredTriangle[java.awt.Point[x=2,y=1], java.awt.Point[x=1,y=2], java.awt.Point[x=3,y=2], java.awt.Color[r=255,g=0,b=0]]

Page 61: Capitolo 5 Decisioni Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies.

Java – Guida alla programmazione - James Cohoon, Jack Davidson

Copyright © 2004 - The McGraw-Hill Companies srl

// equals(): facilitatore di uguaglianzapublic boolean equals(Object p)

if (p instanceof ColoredTriangle) Point v1 = getPoint(1);Point v2 = getPoint(2);Point v3 = getPoint(3);Color c = getColor();ColoredTriangle t = (ColoredTriangle) p;

return v1.equals(t.getPoint(1))&& v2.equals(t.getPoint(2))&& v3.equals(t.getPoint(3))&& c.equals(t.getColor());

}else

return false;}

}

Implementazione - facilitatore equals()

instanceof verifica se l'operando sinistro è un'istanza di quello destro

Poiché si tratta di una sovrascrittura, il tipo di parametro è Object

Page 62: Capitolo 5 Decisioni Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies.

Java – Guida alla programmazione - James Cohoon, Jack Davidson

Copyright © 2004 - The McGraw-Hill Companies srlImplementazione - facilitatore equals()

ColoredTriangle e = new ColoredTriangle();ColoredTriangle f = new ColoredTriangle(new Point(2,1),

new Point(1,2), new Point(3,2), Color.YELLOW);ColoredTriangle g = new ColoredTriangle(new Point(2,1),

new Point(1,2), new Point(3,2), Color.YELLOW);

boolean flag1 = e.equals(f);boolean flag2 = e.equals(g);boolean flag2 = e.equals(g);

System.out.println(flag1 + " " + flag2 + " " + flag3);

Page 63: Capitolo 5 Decisioni Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies.

Java – Guida alla programmazione - James Cohoon, Jack Davidson

Copyright © 2004 - The McGraw-Hill Companies srlImplementazione - facilitatore equals()

e ColoredTriangle

p1:

p3:

p2:

color:

x: 1 y: 1Point

x: 2 y: 2Point

x: 3 y: 3Point

r: 0 y: 0Color g: 0

f ColoredTriangle

p1:

p3:

p2:

color:

x: 2 y: 1Point

x: 1 y: 2Point

x: 3 y: 2Point

r: 0 y:255Color g: 0

g ColoredTriangle

p1:

p3:

p2:

color:

x: 2 y: 1Point

x: 1 y: 2Point

x: 3 y: 2Point

Page 64: Capitolo 5 Decisioni Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies.

Java – Guida alla programmazione - James Cohoon, Jack Davidson

Copyright © 2004 - The McGraw-Hill Companies srlImplementazione - facilitatore paint()// paint(): facilitatore di renderingpublic void paint(Graphics g)

Point v1 = getPoint(1);Point v2 = getPoint(2);Point v3 = getPoint(3);Color c = getColor();

g.setColor(c);

Polygon t = new Polygon();t.addPoint(v1.x, v1.y);t.addPoint(v2.x, v2.y);t.addPoint(v3.x, v3.y);

g.fillPolygon(t);}

Parte di awt

Rappresenta un poligono usando l'elenco di punti nel poligono referenziato da t