mercoledì 4 giugno 2014

Programmazione: Capitolo 5, Parte 1

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