A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Capitulo 5 Decisões.

Apresentações semelhantes


Apresentação em tema: "Capitulo 5 Decisões."— Transcrição da apresentação:

1 Capitulo 5 Decisões

2 Uma decisão

3 A instrução if if (condição) { instrução } if (amount <= balance)
{ balance = balance - amount;

4 Conjunto de instruções com um único if:
if (amount <= balance) { balance -= balance; }

5 Condições alternativas

6 Instrução if/else if (condição) { instrução1 } else { instrução2 }
if (amount <= balance) { balance = balance - amount; else { balance = balance - OVERDRAFT_PENALTY;

7 Operadores relacionais (comparações)
< > diferente <= >= corresponde a £ ³ == != corresponde a = ¹

8 Comparação de valores com virgula flutuante
Erros de arredondamento: double r = Math.sqrt(2) r * r é e não 2 r * r == 2 é falso Para testar se x e y são suficientemente próximos: |x - y| e e, e é um valor muito pequeno (e.x ) Não é valido para números muito grande, p.e., Deve usar-se : |x - y| £ e * max(|x|, |y|) Math.abs(x - y) <= EPSILON * Math.max(Math.abs(x), Math.abs(y));

9 Comparação de Strings Não utilizar == para strings! if (input == "Y") // Errado!!! Utilize o método equals : if (input.equals("Y")) == testa se duas strings se referem ao mesmo objecto, i.e., se são apenas dois nomes diferentes para o mesmo objecto. Método equals testa se os objectos a que se referem são iguais. Para efectuar um teste Case insensitive ("Y" ou y") if (input.equalsIgnoreCase("Y"))

10 Comparação de Objectos
== para testar a identidade, equals para testar o conteúdo Rectangle a = new Rectangle(5, 10, 20, 30); Rectangle b = new Rectangle(5, 10, 20, 30); a != b, mas a.equals(b) Aviso: devemos definir o método equals na nossa classe (capitulo 9)

11 Comparação de objectos

12 Comparação Lexicográfica
s.compareTo(t) < 0 significa: s vem antes de t no dicionário "car" vem antes de "cargo" que vem antes de "cathode". Todas as letras maiúsculas vem antes das minúsculas: "Hello" vem antes de "car"

13 Comparação lexigrafica

14 Alternativas múltiplas
if (condição1) instrução1; else if (condição2) instrução2; else if (condição3) instrução3; else instrução4; A primeira condição verdadeira é executada. A ordem é importante.

15 Program Richter.java public class Richter { public String getMagnitude(double theMagnitude) Earthquake quake = new Earthquake(theMagnitude); return quake.getDescription()); } public class Earthquake public Earthquake(double magnitude) richter_ = magnitude;

16 public String getDescription()
{ String r; if (richter_ >= 8.0) r = "Most structures fall"; else if (richter_ >= 7.0) r = "Many buildings destroyed"; else if (richter_ >= 6.0) r = "Many buildings considerably damaged, some collapse"; else if (richter_ >= 4.5) r = "Damage to poorly constructed buildings"; else if (richter_ >= 3.5) r = "Felt by many people, no destruction"; else if (richter_ >= 0) r = "Generally not felt by people"; else r = "Negative numbers are not valid"; return r; } private double richter_; } // Nota: a regra de estilo n.º10 não foi respeitada apenas por // falta de espaço

17 Ciclos aninhados if (condição1) { if (condição1a) { instrução1a;
} else { instrução1b; } }

18 Cálculo de impostos

19 Program Tax.java public class Tax { // method to calculate the incoming tax // status may be “M” or “S” public getTax(double income,String status) TaxReturn aTaxReturn = new TaxReturn(income, status); return aTaxReturn.getTax(); }

20 public class TaxReturn
{ public TaxReturn(double anIncome, String aStatus) income_ = anIncome; status_ = aStatus; } public double getTax() double tax = 0; final double RATE1 = 0.15; final double RATE2 = 0.28; final double RATE3 = 0.31; final double SINGLE_CUTOFF1 = 21450; final double SINGLE_CUTOFF2 = 51900;

21 final double SINGLE_BASE2 = 3217.50;
final double MARRIED_CUTOFF1 = 35800; final double MARRIED_CUTOFF2 = 86500; final double MARRIED_BASE2 = 5370; final double MARRIED_BASE3 = 19566; if (status_.equalsIgnoreCase("S")) { if (income_ <= SINGLE_CUTOFF1) tax = RATE1 * income_; } else if (income <= SINGLE_CUTOFF2) tax = SINGLE_BASE2 + RATE2 * (income_ - SINGLE_CUTOFF1); else tax = SINGLE_BASE3 + RATE3 * (income_ - SINGLE_CUTOFF2);

22 else { if (income_ <= MARRIED_CUTOFF1) tax = RATE1 * income_; } else if (income_ <= MARRIED_CUTOFF2) tax = MARRIED_BASE2 + RATE2 * (income_ - MARRIED_CUTOFF1); tax = MARRIED_BASE3 + RATE3 * (income_ - MARRIED_CUTOFF2); return tax; private double income_; private String status_;

23 O tipo booleano George Boole (1815-1864): pioneiro no estudo da lógica
O valor da expressão x < 10 é true ou false. Tipo booleano: um de dois valores (V ou F) O método equals devolve um valor do tipo boolean

24 Operadores booleanos && e || ou ! negação
if ( (tday == bday) && (tmonth == month) )... if ( (tmonth == 4) || (tmonth == 6) || (tmonth == 9) || (tmonth == 11) )... if ( (tmonth > bmonth) || ((tmonth == bmonth) && (tday > bday)) )...

25 Fluxograma para combinações de && e
||

26 Tabelas de verdade A B A && B true true true true false false false any false A B A || B true any true false true true false false false A !A true false false true

27 Lei de De Morgan !(A && B) é idêntico a !A || !B
if ( !(country.equals("USA") && !state.equals("AK) && !state.equals("HI")) )... if (!country.equals("USA") || !!state.equals("AK) || !!state.equals("HI"))...

28 Variáveis booleanas As variáveis bolenas são por vezes chamadas flags
boolean shipByAir = false; if (!country.equals("USA")) { shipByAir = true; } else if ( state.equals("AK") || state.equals("HI") ) } if (shipByAir) ... else ... As variáveis bolenas são por vezes chamadas flags

29 Boolean do's and don'ts não escrever: if (shipByAir == true)... if (shipByAir != false)... escrever: if (shipByAir)... não escrever: if (balance < 0) { return true; } else return false; escrever: return balance < 0;


Carregar ppt "Capitulo 5 Decisões."

Apresentações semelhantes


Anúncios Google