L'enunciato if
§ L'enunciato if consente a un programma di compiere
azioni
diverse in dipendenza dal verificarsi di una condizione.
if (amount <= balance)
balance
= balance - amount;
Diagramma
di flusso
di un enunciato if
L'enunciato if/else
if (amount <= balance)
balance = balance - amount;
else
balance
= balance - OVERDRAFT_PENALTY;
Diagramma di flusso di un
enunciato if/else
Tipi di enunciati
§ Enunciato semplice
balance = balance - amount;
§ Enunciato composto
Anche while, for, ecc.
if (x >= 0) y = x;
§ Blocco di enunciati
{
double
newBalance = balance - amount;
balance = newBalance;
}
Sintassi 5.1: L'enunciato if
if(condizione)
enunciato
if (condizione)
enunciato1
else
enunciato2
Esempio:
if (amount <= balance)
balance
= balance - amount;
if
(amount <= balance)
balance
= balance - amount;
else
balance
= balance - OVERDRAFT_PENALTY;
Obiettivo:
Eseguire un enunciato quando una condizione è vera o falsa
Sintassi 5.2: Blocco di enunciati
{
enunciato1
enunciato2
. . .
}
Esempio:
{
double newBalance = balance
- amount;
balance = newBalance;
}
Obiettivo:
Raggruppare diversi enunciati per formare un enunciato unico
Confrontare valori: Operatori relazionali
§ Gli operatori relazionali confrontano
valori.
§ L’operatore == verifica l’uguaglianza.
a = 5; // assegna 5 ad a
if
(a == 5) . . . // verifica se a è uguale a 5
Confrontare numeri in virgola mobile
§ Il codice:
double r = Math.sqrt(2);
double d = r * r -2;
if (d == 0)
System.out.println("sqrt(2)squared
minus 2 is 0");
else
System.out.println("sqrt(2)squared
minus 2 is not 0 but " + d);
§ stampa:
sqrt(2)squared minus 2 is not 0 but
4.440892098500626E-16
Confrontare numeri in virgola mobile
§ Confrontando numeri in virgola mobile, non fate verifiche
di
uguaglianza (= =), ma controllate se i valori sono sufficientemente
prossimi.
§ Per confrontare numeri double, di solito si usa un valore
di ε uguale
a 10–14 .
§ Analogamente, potete verificare se due numeri sono
prossimi l’uno
all’altro controllando se la loro differenza è prossima a 0.
§ |x - y| ≤ ε
final double EPSILON = 1E-14;
if (Math.abs(x - y) <=
EPSILON)
//
x è quasi uguale a y
Confrontare stringhe
§ Non utilizzare == per le stringhe
if (string1 == string2) // inutile
§ Utilizzare il metodo equals:
if
(input.equals("Y"))
§ == verifica se le
due variabili stringa si riferiscono al
medesimo oggetto stringa.
equals verifica che il contenuto sia uguale.
§ Per ignorare le differenze tra maiuscolo e minuscolo usate
il
metodo equalsIgnoreCase
if
(input.equalsIgnoreCase("Y"))
Confrontare stringhe
§ s.compareTo(t) < 0 significa che s precede la t in
ordine alfabetico.
§ "car" precede "cargo"
§ Tutte le lettere maiuscole precedono quelle minuscole
“B” precede “a”
Confrontare oggetti
§ L’operatore == verifica se due riferimenti a oggetto
sono
identici. Per confrontare, invece, i contenuti di oggetti, si
deve usare il metodo equals.
§ non box1 == box3,
ma box1.equals(box3)
§ equals deve
essere definito nella classe
Rectangle box1 = new
Rectangle(5, 10, 20, 30);
Rectangle box2 = box1;
Rectangle box3 = new Rectangle(5, 10, 20,
30);
Confrontare oggetti
Confronto
tra riferimenti
a oggetti
Confrontare con null
§ Il riferimento null non fa riferimento ad alcun oggetto.
String middleInitial = null; // Valore iniziale non valido
if ( . . . )
middleInitial = middleName.substring(0, 1);
§ Per verificare se un riferimento è null si usa l’operatore
== (e non equals):
if (middleInitial == null)
System.out.println(firstName
+ " " + lastName);
else
System.out.println(firstName
+ " " + middleInitial + ". "
+
lastName);
Confrontare
con null
Un riferimento null è
diverso da una stringa vuota "".
La stringa vuota è una
stringa valida di lunghezza 0,
mentre il valore null indica
che una variabile di tipo
stringa non si riferisce
ad alcuna stringa.
File Earthquake.java
01: /**
02: Una classe che descrive gli effetti di un terremoto.
03: */
04: public class Earthquake
05: {
06: /**
07: Costruisce un oggetto che rappresenta un terremoto.
08: @param magnitude
the magnitude on the Richter scale
09: */
10: public
Earthquake(double magnitude)
11: {
12: richter =
magnitude;
13: }
14:
15: /**
16: Restituisce la descrizione dell'effetto del terremoto.
17: @return the la descrizione dell'effetto
18:
*/
19: public String
getDescription()
20: {
21: String r;
22: if (richter >=
8.0)
23: r = "Most
structures fall";
24: else if (richter
>= 7.0)
25: r = "Many
buildings destroyed";
26: else if (richter
>= 6.0)
27: r = "Many
buildings considerably damaged, some
collapse";
28: else if (richter
>= 4.5)
29: r = "Damage
to poorly constructed buildings";
30: else if (richter
>= 3.5)
31: r = "Felt by
many people, no destruction";
32: else if (richter
>= 0)
33: r =
"Generally not felt by people";
34: else
35: r = "Negative
numbers are not valid";
36: return r;
37:
}
38:
39: private double richter;
40:
}
File EarthquakeRunner.java
01: import
java.util.Scanner;
02:
03: /**
04: Programma che visualizza la descrizione di un terremoto.
05: */
06: public class
EarthquakeRunner
07: {
08: public static void
main(String[] args)
09: {
10: Scanner in = new
Scanner(System.in);
11:
12: System.out.print("Enter
a magnitude on the Richter scale: ");
13: double magnitude =
in.nextDouble();
14: Earthquake quake =
new Earthquake(magnitude);
15: System.out.println(quake.getDescription());
16: }
17:
}
Visualizza: Enter a magnitude on
the Richter scale: 7.1 Many buildings destroyed
Nessun commento:
Posta un commento