• Non ci sono risultati.

Decisioni Decisioni

N/A
N/A
Protected

Academic year: 2021

Condividi "Decisioni Decisioni"

Copied!
45
0
0

Testo completo

(1)

Decisioni Decisioni

C. Horstmann

C. Horstmann

Fondamenti di programmazione e Java 2

Fondamenti di programmazione e Java 2

3^ edizione Apogeo

3^ edizione Apogeo

trad. Nicola Fanizzi

trad. Nicola Fanizzi

corso di Programmazione, CdS: Informatica TPS

corso di Programmazione, CdS: Informatica TPS

Dip. di Informatica, Università degli studi di Bari

Dip. di Informatica, Università degli studi di Bari

(2)

2 2

Obiettivi Obiettivi

 Essere in grado di implementare decisioni usando Essere in grado di implementare decisioni usando istruzioni

istruzioni if if

 Capire come raggruppare istruzioni in blocchi Capire come raggruppare istruzioni in blocchi

 Imparare come confrontare interi, numeri in virgola Imparare come confrontare interi, numeri in virgola mobile, stringhe ed oggetti

mobile, stringhe ed oggetti

 Riconoscere il corretto ordinamento delle decisioni in Riconoscere il corretto ordinamento delle decisioni in diramazioni multiple

diramazioni multiple

 Programmare condizioni usando operatori e variabili Programmare condizioni usando operatori e variabili booleani

booleani

(3)

3 3

Istruzione

Istruzione if if

 L'istruzione L'istruzione if if permette ad un programma di permette ad un programma di

svolgere azioni diverse dipendentemente da una svolgere azioni diverse dipendentemente da una

certa condizione certa condizione

if (amount <= balance) if (amount <= balance)

balance = balance - amount;

balance = balance - amount;

(4)

4 4

Istruzione

Istruzione if if

if (amount <= balance) if (amount <= balance)

balance = balance - amount;

balance = balance - amount;

(5)

5 5

Istruzione

Istruzione if/else if/else

if (amount <= balance) if (amount <= balance)

balance = balance - amount;

balance = balance - amount;

else else

balance = balance - OVERDRAFT_PENALTY;

balance = balance - OVERDRAFT_PENALTY;

(6)

6 6

Istruzione

Istruzione if/else if/else

(7)

7 7

Tipi di Istruzioni Tipi di Istruzioni

 Istruzioni semplici Istruzioni semplici

 Istruzioni complesse Istruzioni complesse

 Includono anche Includono anche while while , , for for , ecc. , ecc.

(istruzioni di ciclo – Cap. 7) (istruzioni di ciclo – Cap. 7)

balance = balance - amount;

balance = balance - amount;

if (balance >= amount) balance = balance - amount;

if (balance >= amount) balance = balance - amount;

(8)

8 8

Tipi di Istruzioni Tipi di Istruzioni

 Blocco di istruzioni Blocco di istruzioni

{ {

    double newBalance = balance - amount;

    double newBalance = balance - amount;

    balance = newBalance;

    balance = newBalance;

} }

(9)

9 9

Sintassi 6.1: Istruzione

Sintassi 6.1: Istruzione if if

if ( if ( condition condition ) )         statement statement if ( if ( condition condition ) )         statement1 statement1 else else

   statement2    statement2

Esempio Esempio : :

    if (amount <= balance) if (amount <= balance)

balance = balance - amount;

balance = balance - amount;

if (amount <= balance) if (amount <= balance)

balance = balance - amount;

balance = balance - amount;

else else

balance = balance - OVERDRAFT_PENALTY;

balance = balance - OVERDRAFT_PENALTY;

Scopo Scopo : eseguire un'istruzione/blocco quando una : eseguire un'istruzione/blocco quando una

(10)

10 10

Sintassi 6.2: Blocco Sintassi 6.2: Blocco

{ {

        statement statement 1 1         statement statement 2 2    . . .

   . . . } }

 Esempio: Esempio:

    { {

double newBalance = balance - amount;

double newBalance = balance - amount;

balance = newBalance;

balance = newBalance;

} }

Scopo Scopo : raggruppare diverse istruzioni in modo da : raggruppare diverse istruzioni in modo da formare un'unica istruzione

formare un'unica istruzione

(11)

11 11

Confrontare Valori:

Confrontare Valori:

Operatori Relazionali Operatori Relazionali

 Gli operatori relazionali confrontano valori Gli operatori relazionali confrontano valori

NB: L'operatore

NB: L'operatore == == denota il test di uguaglianza: denota il test di uguaglianza:

diverso diverso

≠ ≠

!= !=

uguale uguale

= =

== ==

minore o uguale minore o uguale

≤ ≤

<=

<=

minore minore

< <

< <

Maggiore o uguale Maggiore o uguale

≥ ≥

>=

>=

maggiore maggiore

> >

> >

Descrizione Descrizione Matematica

Matematica Java Java

a = 5; // assegna 5 ad a a = 5; // assegna 5 ad a

if (a == 5) . . . // Controlla se a è uguale a 5

if (a == 5) . . . // Controlla se a è uguale a 5

(12)

12 12

Confrontare Confrontare Numeri in Virgola Mobile Numeri in Virgola Mobile

 Si consideri questo pezzo di codice: Si consideri questo pezzo di codice:

 Stamperà: Stamperà:

double r = Math.sqrt(2);

double r = Math.sqrt(2);

double d = r * r -2;

double d = r * r -2;

if (d == 0) if (d == 0)

System.out.println("sqrt(2)squared minus 2 is 0");

System.out.println("sqrt(2)squared minus 2 is 0");

else else

System.out.println("sqrt(2)squared minus 2 is not 0 System.out.println("sqrt(2)squared minus 2 is not 0

but " + d);

but " + d);

sqrt(2)squared minus 2 is not 0 but 4.440892098500626E-16

sqrt(2)squared minus 2 is not 0 but 4.440892098500626E-16

(13)

13 13

Confrontare Confrontare Numeri in Virgola Mobile Numeri in Virgola Mobile

 Per evitare errori di arrotondamento, Per evitare errori di arrotondamento, non non si usi si usi == ==

per confrontare numeri in virgola mobile per confrontare numeri in virgola mobile

 Per confrontare numeri in virgola mobile Per confrontare numeri in virgola mobile si controlli se essi sono vicini a sufficienza:

si controlli se essi sono vicini a sufficienza:

|x - y| ≤ ε

|x - y| ≤ ε

 ε è un numero molto piccolo, dell'ordine di 10 ε è un numero molto piccolo, dell'ordine di 10 -14 -14

final double EPSILON = 1E-14;

final double EPSILON = 1E-14;

if (Math.abs(x - y) <= EPSILON) if (Math.abs(x - y) <= EPSILON)

// x è approssimativamente pari a y

// x è approssimativamente pari a y

(14)

14 14

Confrontare Stringhe Confrontare Stringhe

 Non usare Non usare == == per le stringhe! per le stringhe!

 Si usi invece il metodo Si usi invece il metodo equals equals : :

 == == testa l'identità, testa l'identità, equals equals testa eguali contenuti testa eguali contenuti

 Test non sensibile a maiuscole/minuscole ("Y" o "y") Test non sensibile a maiuscole/minuscole ("Y" o "y")

if (input == "Y") // ERRATO!!!

if (input == "Y") // ERRATO!!!

if (input.equals("Y")) if (input.equals("Y"))

if (input.equalsIgnoreCase("Y"))

if (input.equalsIgnoreCase("Y"))

(15)

15 15

Confrontare Stringhe Confrontare Stringhe

 s.compareTo(t) < 0 s.compareTo(t) < 0 singifica singifica s s precede precede t t nel dizionario nel dizionario

 "car" "car" viene prima di "cargo" viene prima di "cargo"

 Tutte le maiuscole vengono prima delle minuscole: Tutte le maiuscole vengono prima delle minuscole:

 "Hello" "Hello" viene prima di viene prima di "car" "car"

(16)

16 16

Confronto Lessicografico

Confronto Lessicografico

(17)

17 17

Confrontare Oggetti Confrontare Oggetti

 == == testa l'identità (stesso oggetto), testa l'identità (stesso oggetto), equals

equals testa l'identico contenuto testa l'identico contenuto

 box1 != box3 box1 != box3 , ma , ma

box1.equals(box3) box1.equals(box3)

 box1 == box2 box1 == box2

Caveat Caveat : deve essere definito un metodo : deve essere definito un metodo equals equals per la data classe

Rectangle box1 = new Rectangle(5, 10, 20, 30);

Rectangle box1 = new Rectangle(5, 10, 20, 30);

Rectangle box2 = box1;

Rectangle box2 = box1;

Rectangle box3 = new Rectangle(5, 10, 20, 30);

Rectangle box3 = new Rectangle(5, 10, 20, 30);

(18)

18 18

Confrontare Oggetti Confrontare Oggetti

Confronto

di riferimenti ad oggetti

(19)

19 19

Confronto con

Confronto con null null

 Il riferimento Il riferimento null null non riferisce ad alcun oggetto non riferisce ad alcun oggetto

 Si può usare nei test: Si può usare nei test:

String middleInitial = null; // non impostato String middleInitial = null; // non impostato

if ( . . . ) if ( . . . )

middleInitial = middleName.substring(0, 1);

middleInitial = middleName.substring(0, 1);

if (middleInitial == null) if (middleInitial == null)

System.out.println(firstName + " " + lastName);

System.out.println(firstName + " " + lastName);

else else

System.out.println(firstName + " " + middleInitial + System.out.println(firstName + " " + middleInitial +

". "

". "

+ lastName); + lastName);

(20)

20 20

Confronto con

Confronto con null null

 Usare Usare == == non non equals equals

per confrontare con il riferimento

per confrontare con il riferimento null null

 null null è è diverso diverso della stringa vuota della stringa vuota "" ""

(21)

21 21

Alternative Multiple:

Alternative Multiple:

Sequenze di Confronti Sequenze di Confronti

 viene eseguita la prima condizione con cui si trova la viene eseguita la prima condizione con cui si trova la corrispondenza (

corrispondenza ( match match ) )

 L'ordine conta: L'ordine conta:

if (condition1) if (condition1)    statement1;

   statement1;

else if (condition2) else if (condition2)    statement2;

   statement2;

. . . . . . else else

   statement4;

   statement4;

if (richter >= 0) // si passa sempre if (richter >= 0) // si passa sempre    r = "Generally not felt by people";

   r = "Generally not felt by people";

else if (richter >= 3.5) // non testata else if (richter >= 3.5) // non testata

   r = "Felt by many people, no destruction

   r = "Felt by many people, no destruction

(22)

22 22

Alternative Multiple:

Alternative Multiple:

Sequenze di Confronti Sequenze di Confronti

 Non va omesso l' Non va omesso l' else else

if (richter >= 8.0) if (richter >= 8.0)

   r = "Most structures fall";

   r = "Most structures fall";

if (richter >= 7.0) // else omesso--ERRORE if (richter >= 7.0) // else omesso--ERRORE    r = "Many buildings destroyed

   r = "Many buildings destroyed

(23)

23 23

Earthquake.java Earthquake.java

01: /**

01: /**

02: Classe che descrive gli effetti di un sisma.

02: Classe che descrive gli effetti di un sisma.

03: */

03: */

04: public class Earthquake 04: public class Earthquake

05: { 05: {

06: /**

06: /**

07: Costruisce un oggetto Earthquake.

07: Costruisce un oggetto Earthquake.

08: @param magnitude la magnitudo sulla scala 08: @param magnitude la magnitudo sulla scala

Richter Richter

09: */

09: */

10: public Earthquake(double magnitude) 10: public Earthquake(double magnitude)

11: { 11: {

12: richter = magnitude;

12: richter = magnitude;

13: }

13: }

14: 14:

(24)

24 24

Earthquake.java Earthquake.java

19: public String getDescription() 19: public String getDescription()

20: { 20: {

21: String r;

21: String r;

22: if (richter >= 8.0) 22: if (richter >= 8.0)

23: r = "Most structures fall";

23: r = "Most structures fall";

24: else if (richter >= 7.0) 24: else if (richter >= 7.0)

25: r = "Many buildings destroyed";

25: r = "Many buildings destroyed";

26: else if (richter >= 6.0) 26: else if (richter >= 6.0)

27: r = "Many buildings considerably damaged, 27: r = "Many buildings considerably damaged,

some collapse";

some collapse";

28: else if (richter >= 4.5) 28: else if (richter >= 4.5)

29: r = "Damage to poorly constructed 29: r = "Damage to poorly constructed

buildings";

buildings";

30: else if (richter >= 3.5) 30: else if (richter >= 3.5)

31: r = "Felt by many people, no destruction";

31: r = "Felt by many people, no destruction";

32: else if (richter >= 0) 32: else if (richter >= 0)

33: r = "Generally not felt by people";

33: r = "Generally not felt by people";

34: else 34: else

35: r = "Negative numbers are not valid";

35: r = "Negative numbers are not valid";

(25)

25 25

Earthquake.java Earthquake.java

38: 38:

39: private double richter;

39: private double richter;

40: }

40: }

(26)

26 26

Collaudo di

Collaudo di Earthquake Earthquake

01: import java.util.Scanner;

01: import java.util.Scanner;

02: 02:

03: /**

03: /**

04: class di collaudo per la classe Earthquake 04: class di collaudo per la classe Earthquake 05: */

05: */

06: public class EarthquakeTester 06: public class EarthquakeTester 07: {

07: {

08: public static void main(String[] args) 08: public static void main(String[] args) 09: {

09: {

10: Scanner in = new Scanner(System.in);

10: Scanner in = new Scanner(System.in);

11: 11:

12: System.out.print("Enter a magnitude on the 12: System.out.print("Enter a magnitude on the Richter scale: ");

Richter scale: ");

13: double magnitude = in.nextDouble();

13: double magnitude = in.nextDouble();

14: Earthquake quake = new 14: Earthquake quake = new Earthquake(magnitude);

Earthquake(magnitude);

15: System.out.println(quake.getDescription());

15: System.out.println(quake.getDescription());

16: }

16: }

(27)

27 27

Alternative Multiple:

Alternative Multiple:

Rami Nidificati Rami Nidificati

 Ramificazioni all'interno di altre ramificazioni: Ramificazioni all'interno di altre ramificazioni:

if (condition1) if (condition1) { {

if (condition1a) if (condition1a) statement1a;

statement1a;

else else

statement1b;

statement1b;

} }

else else

statement2;

statement2;

(28)

28 28

Aliquote Fiscale Aliquote Fiscale

Conuigato/a Conuigato/a Libero/a

Libero/a

31% 31%

superiore a $86,500 superiore a $86,500 31% 31%

superiore a $51,900 superiore a $51,900

28% 28%

da $35,800 a $86,500 da $35,800 a $86,500 28% 28%

da $21,451 a $51,900 da $21,451 a $51,900

15% 15%

da $0 a $35,800 da $0 a $35,800 15% 15%

da $0 a $21,450 da $0 a $21,450

Percentuale Percentuale Scaglione

Scaglione Percentuale

Percentuale Scaglione

Scaglione

(29)

29 29

Ramificazioni Annidate Ramificazioni Annidate

 Si calcolino le tasse dovute, in base allo stato civile e Si calcolino le tasse dovute, in base allo stato civile e l'entità del reddito:

l'entità del reddito:

1) 1) suddividere in base allo stato civile suddividere in base allo stato civile

2) 2) per ognuna delle condizioni, suddividere in base al reddito per ognuna delle condizioni, suddividere in base al reddito

 Il processo decisionale a due livelli si riflette in due Il processo decisionale a due livelli si riflette in due livelli di istruzioni

livelli di istruzioni if if

 Si dice che il test sul reddito è Si dice che il test sul reddito è nidificato nidificato nel test nel test sullo stato civile

sullo stato civile

(30)

30 30

Ramificazioni Annidate Ramificazioni Annidate

Aliquote USA (1992)

(31)

31 31

TaxReturn.java TaxReturn.java

01: /**

01: /**

02: Una dichiarazione dei redditi per un contribuente nel 02: Una dichiarazione dei redditi per un contribuente nel 1992.

1992.

03: */

03: */

04: public class TaxReturn 04: public class TaxReturn 05: {

05: { 06: /**

06: /**

07: Costruisce un oggetto TaxReturn per un dato 07: Costruisce un oggetto TaxReturn per un dato 08: reddito e stato civile.

08: reddito e stato civile.

09: @param anIncome il reddito del dichiarante 09: @param anIncome il reddito del dichiarante 10: @param aStatus costante SINGLE oppure MARRIED 10: @param aStatus costante SINGLE oppure MARRIED 11: */

11: */

12: public TaxReturn(double anIncome, int aStatus) 12: public TaxReturn(double anIncome, int aStatus) 13: {

13: {

14: income = anIncome;

14: income = anIncome;

15: status = aStatus;

15: status = aStatus;

16: }

16: }

17:

(32)

32 32

TaxReturn.java TaxReturn.java

18: public double getTax() 18: public double getTax() 19: {

19: {

20: double tax = 0;

20: double tax = 0;

21: 21:

22: if (status == SINGLE) 22: if (status == SINGLE) 23: {

23: {

24: if (income <= SINGLE_BRACKET1) 24: if (income <= SINGLE_BRACKET1) 25: tax = RATE1 * income;

25: tax = RATE1 * income;

26: else if (income <= SINGLE_BRACKET2) 26: else if (income <= SINGLE_BRACKET2) 27: tax = RATE1 * SINGLE_BRACKET1 27: tax = RATE1 * SINGLE_BRACKET1

28: + RATE2 * (income - SINGLE_BRACKET1);

28: + RATE2 * (income - SINGLE_BRACKET1);

29: else 29: else

30: tax = RATE1 * SINGLE_BRACKET1 30: tax = RATE1 * SINGLE_BRACKET1

31: + RATE2 * (SINGLE_BRACKET2 – 31: + RATE2 * (SINGLE_BRACKET2 – SINGLE_BRACKET1)

SINGLE_BRACKET1)

32: + RATE3 * (income - SINGLE_BRACKET2);

32: + RATE3 * (income - SINGLE_BRACKET2);

33: }

33: }

(33)

33 33

TaxReturn.java TaxReturn.java

34: else 34: else

35: { 35: {

36: if (income <= MARRIED_BRACKET1) 36: if (income <= MARRIED_BRACKET1)

37: tax = RATE1 * income;

37: tax = RATE1 * income;

38: else if (income <= MARRIED_BRACKET2) 38: else if (income <= MARRIED_BRACKET2)

39: tax = RATE1 * MARRIED_BRACKET1 39: tax = RATE1 * MARRIED_BRACKET1

40: + RATE2 * (income - MARRIED_BRACKET1);

40: + RATE2 * (income - MARRIED_BRACKET1);

41: else 41: else

42: tax = RATE1 * MARRIED_BRACKET1 42: tax = RATE1 * MARRIED_BRACKET1

43: + RATE2 * (MARRIED_BRACKET2 – 43: + RATE2 * (MARRIED_BRACKET2 –

MARRIED_BRACKET1) MARRIED_BRACKET1)

44: + RATE3 * (income - MARRIED_BRACKET2);

44: + RATE3 * (income - MARRIED_BRACKET2);

45: } 45: } 46: 46:

47: return tax;

47: return tax;

48: } 48: } 49: 49:

50: public static final int SINGLE = 1;

50: public static final int SINGLE = 1;

51: public static final int MARRIED = 2;

51: public static final int MARRIED = 2;

(34)

34 34

TaxReturn.java TaxReturn.java

53: private static final double RATE1 = 0.15;

53: private static final double RATE1 = 0.15;

54: private static final double RATE2 = 0.28;

54: private static final double RATE2 = 0.28;

55: private static final double RATE3 = 0.31;

55: private static final double RATE3 = 0.31;

56: 56:

57: private static final double SINGLE_BRACKET1 = 21450;

57: private static final double SINGLE_BRACKET1 = 21450;

58: private static final double SINGLE_BRACKET2 = 51900;

58: private static final double SINGLE_BRACKET2 = 51900;

59: 59:

60: private static final double MARRIED_BRACKET1 = 35800;

60: private static final double MARRIED_BRACKET1 = 35800;

61: private static final double MARRIED_BRACKET2 = 86500;

61: private static final double MARRIED_BRACKET2 = 86500;

62: 62:

63: private double income;

63: private double income;

64: private int status;

64: private int status;

65: }

65: }

(35)

35 35

Collaudo di

Collaudo di TaxReturn.java TaxReturn.java

01: import java.util.Scanner;

01: import java.util.Scanner;

02: 02:

03: /**

03: /**

04: Classe di collaudo per TaxReturn.

04: Classe di collaudo per TaxReturn.

05: */

05: */

06: public class TaxReturnTester 06: public class TaxReturnTester 07: {

07: {

08: public static void main(String[] args) 08: public static void main(String[] args) 09: {

09: {

10: Scanner in = new Scanner(System.in);

10: Scanner in = new Scanner(System.in);

11: 11:

12: System.out.print("Please enter your income: ");

12: System.out.print("Please enter your income: ");

13: double income = in.nextDouble();

13: double income = in.nextDouble();

14: 14:

15: System.out.print("Please enter S (single) or M 15: System.out.print("Please enter S (single) or M

(married): "); (married): ");

16: String input = in.next();

16: String input = in.next();

17: int status = 0;18:

17: int status = 0;18:

(36)

36 36

Collaudo di

Collaudo di TaxReturn.java TaxReturn.java

19: if (input.equalsIgnoreCase("S")) 19: if (input.equalsIgnoreCase("S")) 20: status = TaxReturn.SINGLE;

20: status = TaxReturn.SINGLE;

21: else if (input.equalsIgnoreCase("M")) 21: else if (input.equalsIgnoreCase("M")) 22: status = TaxReturn.MARRIED;

22: status = TaxReturn.MARRIED;

23: else 23: else 24: {

24: {

25: System.out.println("Bad input.");

25: System.out.println("Bad input.");

26: return;

26: return;

27: } 27: } 28: 28:

29: TaxReturn aTaxReturn = new TaxReturn(income, status);

29: TaxReturn aTaxReturn = new TaxReturn(income, status);

30: 30:

31: System.out.println("The tax is "

31: System.out.println("The tax is "

32: + aTaxReturn.getTax());

32: + aTaxReturn.getTax());

33: }

33: }

34: }

34: }

(37)

37 37

Collaudo di

Collaudo di TaxReturn.java TaxReturn.java

Please enter your income: 50000 Please enter your income: 50000 Please enter S (single) or M

Please enter S (single) or M (married): S

(married): S

The tax is 11211.5 The tax is 11211.5

 Output Output

(38)

38 38

Uso delle Espressioni Booleane Uso delle Espressioni Booleane

Il Tipo

Il Tipo boolean boolean

George Boole George Boole

(1815-1864): pioniere (1815-1864): pioniere

nello studio della logica nello studio della logica

 Il valore dell'espressione Il valore dell'espressione amount < 1000

amount < 1000 è è true true o false o false

 Tipo Tipo boolean boolean : una : una variabile

variabile boolean boolean assume uno dei due assume uno dei due

valori

valori

(39)

39 39

Uso delle Espressioni Booleane:

Uso delle Espressioni Booleane:

Metodi Predicativi Metodi Predicativi

 Un metodo predicativo restituisce un valore booleano Un metodo predicativo restituisce un valore booleano

 Tipicamente lo si usa nelle condizioni Tipicamente lo si usa nelle condizioni

public boolean isOverdrawn() public boolean isOverdrawn() { {

   return balance < 0;

   return balance < 0;

} }

if (harrysChecking.isOverdrawn()) . . .

if (harrysChecking.isOverdrawn()) . . .

(40)

40 40

Uso delle Espressioni Booleane:

Uso delle Espressioni Booleane:

Metodi Predicativi Metodi Predicativi

 Metodi predicativi d'utilità nella classe Metodi predicativi d'utilità nella classe Character

Character : :

 Metodi predicativi d'utilità nella classe Metodi predicativi d'utilità nella classe Scanner Scanner : : hasNextInt()

hasNextInt() e e hasNextDouble() hasNextDouble()

isDigit isDigit isLetter isLetter

isUpperCase isUpperCase isLowerCase isLowerCase

if (Character.isUpperCase(ch)) . . . if (Character.isUpperCase(ch)) . . .

if (in.hasNextInt()) n = in.nextInt();

if (in.hasNextInt()) n = in.nextInt();

(41)

41 41

Uso delle Espressioni Booleane:

Uso delle Espressioni Booleane:

Operatori Booleani Operatori Booleani

 && &&     and and vero sse entrambi veri vero sse entrambi veri

 || || or or vero sse almeno uno vero vero sse almeno uno vero

 ! !       not not vero se falso e viceversa vero se falso e viceversa

if (0 < amount && amount < 1000) . . . if (0 < amount && amount < 1000) . . .

if (input.equals("S") || input.equals("M")) . . .

if (input.equals("S") || input.equals("M")) . . .

(42)

42 42

Operatori

Operatori && && e e || ||

(43)

43 43

Tavole di Verità Tavole di Verità

False False False

False False

False

True True True True

False False

True True Any Any

True True

A||B A||B B B

A A

False False Any Any

False False

False False False

False True True

True True True True

True True

A&&B A&&B B B

A A

!A !A

A A

(44)

44 44

Uso di Variabili Booleane Uso di Variabili Booleane

 Dichiarazione: Dichiarazione:

 Impostare un valore: Impostare un valore:

 Uso nelle Condizioni: Uso nelle Condizioni:

married = input.equals("M");

married = input.equals("M");

private boolean married;

private boolean married;

if (married) . . . else . . . if (married) . . . else . . . if (!married) . . .

if (!married) . . .

(45)

45 45

Uso di Variabili Booleane Uso di Variabili Booleane

 Chiamate anche Chiamate anche flag flag

 Stilisticamente goffo scrivere una condizione come Stilisticamente goffo scrivere una condizione come

Meglio usare la semplice condizione:

Meglio usare la semplice condizione:

if (married == true) . . . // Da non fare if (married == true) . . . // Da non fare

if (married) . . .

if (married) . . .

Riferimenti

Documenti correlati

Le famiglie il cui lavoro autonomo costituisce la fonte predominante di reddito fruiscono in media di livelli di entrate più elevati rispetto alle altre: nel 2003 queste

Una volta eseguito il programma, SAS scrive dei messaggi nel SAS LOG, ignorare tali messaggi può essere pericoloso perché talvolta si ottengono dei risultati ma tali

I dati inseriti nel file sono: la marca del vino, l’anno di produzione, la data di degustazione, i punteggi dei tre degustatori. • *Esempio di lettura con formato ;

• PROC PRINT: stampa le osservazioni del Sas data set relative a tutte o ad una selezione di variabili. Si possono creare report semplicissimi (elenco osservazioni)

• PROC SORT: ordina le osservazioni del Sas data set rispetto ad una o più variabili, memorizzando il risultante file ordinato in un nuovo Sas data set o

/* CONSTRUCTION of HY020: Total disposable household income (p.111 documento pdf) The sum for all household members of gross personal income components (gross employee cash or near

Un piccolo commento a parte: questa costruzione mostra che ci sono molti preordini che possono essere definiti su un insieme X: si prenda solo qualsiasi f , e questo fornir` a

L’inclusione degli affitti figurativi non altera la struttura delle relazioni precedentemente descritte fra il reddito e le caratteristiche della famiglia