©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 5: Decisions 1 Chapter 5...

29
©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 5: Decisions 1 Chapter 5 Decisions

Transcript of ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 5: Decisions 1 Chapter 5...

Page 1: ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 5: Decisions 1 Chapter 5 Decisions.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

1

Chapter 5: Decisions1

Chapter 5

Decisions

Page 2: ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 5: Decisions 1 Chapter 5 Decisions.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

2

Chapter 5: Decisions2

Figure 1A Decision

Page 3: ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 5: Decisions 1 Chapter 5 Decisions.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

3

Chapter 5: Decisions3

if statement

• if(condition) statement

• if (amount <= balance) balance = balance - amount;

• statement block:if(amount <= balance){ double newBalance = balance - amount; balance = newBalance}

Page 4: ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 5: Decisions 1 Chapter 5 Decisions.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

4

Chapter 5: Decisions4

Figure 2Alternative Conditions

Page 5: ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 5: Decisions 1 Chapter 5 Decisions.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

5

Chapter 5: Decisions5

if/else statement

• if(condition) statementelse statement

• if (amount <= balance) balance = balance - amount;else balance = balance - OVERDRAFT_PENALTY;

Page 6: ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 5: Decisions 1 Chapter 5 Decisions.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

6

Chapter 5: Decisions6

Relational operators

• < > like in math• <= >= correspond to £ ³• == != correspond to = ¹• == is not the same as =:if (x == 5) . . .x = 5;

Page 7: ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 5: Decisions 1 Chapter 5 Decisions.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

7

Chapter 5: Decisions7

Comparing floating-point numbers

• Roundoff errors:double r = Math.sqrt(2)r * r is 2.0000000000000004, not 2r * r == 2 is false

• Test if x and y are close enough:|x - y| £ e, e a small value (e.g. 10-14.)

• Not good enough for very small or large values. Use |x - y| £ e max(|x|, |y|)

Page 8: ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 5: Decisions 1 Chapter 5 Decisions.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

8

Chapter 5: Decisions8

String comparison

• Don't use == for strings!if (input == "Y") // WRONG!!!

• Use equals method:if (input.equals("Y"))

• == tests identity, equals tests equal contents• Case insensitive test ("Y" or "y")if (input.equalsIgnoreCase ("Y"))

Page 9: ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 5: Decisions 1 Chapter 5 Decisions.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

9

Chapter 5: Decisions9

Comparing Objects

• == tests for identity, equals for identical content

• Rectangle a = new Rectangle(5, 10, 20, 30);Rectangle b = new Rectangle(5, 10, 20, 30);

• a != b, but a.equals(b)• Caveat: equals must be defined for the class

(see chapter 9)

Page 10: ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 5: Decisions 1 Chapter 5 Decisions.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

10

Chapter 5: Decisions10

Figure 4Comparing Objects

Page 11: ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 5: Decisions 1 Chapter 5 Decisions.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

11

Chapter 5: Decisions11

Lexicographic Comparison

• s.compareTo(t) < 0 means: s comes before t in the dictionary

• "car"comes before "cargo" comes before x"cathode".

• All uppercase letters come before lowercase: "Hello" comes before "car"

Page 12: ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 5: Decisions 1 Chapter 5 Decisions.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

12

Chapter 5: Decisions12

Figure 3Lexicographic Comparison

Page 13: ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 5: Decisions 1 Chapter 5 Decisions.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

13

Chapter 5: Decisions13

Multiple alternatives

• if (condition1) statement1;else if (condition2) statement2;else if (condition3) statement3;else statement4;

• The first matching condition is executed.Order matters.

Page 14: ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 5: Decisions 1 Chapter 5 Decisions.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

14

Chapter 5: Decisions14

Program Richter.java

public class Richter{ public static void main(String[] args) { ConsoleReader console = new ConsoleReader(System.in); System.out.println ("Enter a magnitude on the Richter scale:"); double magnitude = console.readDouble(); Earthquake quake = new Earthquake(magnitude); System.out.println(quake.getDescription()); }}

class Earthquake{ public Earthquake(double magnitude) { richter = magnitude; }

Page 15: ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 5: Decisions 1 Chapter 5 Decisions.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

15

Chapter 5: Decisions15

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;}

Page 16: ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 5: Decisions 1 Chapter 5 Decisions.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

16

Chapter 5: Decisions16

Nested branches

• if (condition1){ if (condition1a) statement1a; else statement1b;}

Page 17: ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 5: Decisions 1 Chapter 5 Decisions.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

17

Chapter 5: Decisions17

Figure 7Income Tax Computation

Page 18: ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 5: Decisions 1 Chapter 5 Decisions.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

18

Chapter 5: Decisions18

Program Tax.java

public class Tax{ public static void main(String[] args) { ConsoleReader console = new ConsoleReader(System.in);

System.out.println("Please enter your income:"); double income = console.readDouble();

System.out.println("Please enter S for single, " + "M for married:"); String status = console.readLine();

TaxReturn aTaxReturn = new TaxReturn(income, status);

System.out.println("The tax is " + aTaxReturn.getTax()); }}

Page 19: ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 5: Decisions 1 Chapter 5 Decisions.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

19

Chapter 5: Decisions19

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;

Page 20: ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 5: Decisions 1 Chapter 5 Decisions.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

20

Chapter 5: Decisions20

final double SINGLE_BASE2 = 3217.50;final double SINGLE_BASE3 = 11743.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);}

Page 21: ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 5: Decisions 1 Chapter 5 Decisions.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

21

Chapter 5: Decisions21

else { if (income <= MARRIED_CUTOFF1) tax = RATE1 * income; else if (income <= MARRIED_CUTOFF2) tax = MARRIED_BASE2 + RATE2 * (income - MARRIED_CUTOFF1); else tax = MARRIED_BASE3 + RATE3 * (income - MARRIED_CUTOFF2); }

return tax; }

private double income; private String status;}

Page 22: ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 5: Decisions 1 Chapter 5 Decisions.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

22

Chapter 5: Decisions22

The boolean type

• George Boole (1815-1864): pioneer in the study of logic

• value of expression x < 10 is true or false.

• boolean type: one of these 2 truth values• equals method has return type xboolean

Page 23: ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 5: Decisions 1 Chapter 5 Decisions.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

23

Chapter 5: Decisions23

Boolean operators

• && and|| or! not

• if (tday == bday && tmonth == bmonth)...

• if (tmonth == 4 || tmonth == 6 || tmonth == 9 || tmonth == 11)...

• if (tmonth > bmonth || (tmonth == bmonth && tday > bday))...

Page 24: ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 5: Decisions 1 Chapter 5 Decisions.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

24

Chapter 5: Decisions24

Figure 8Flowcharts for &&and || Combinations

Page 25: ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 5: Decisions 1 Chapter 5 Decisions.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

25

Chapter 5: Decisions25

Truth tables

• A B A&&Btrue true truetrue false falsefalse any false

• A B A||Btrue any truefalse true truefalse false false

• A !Atrue falsefalse true

Page 26: ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 5: Decisions 1 Chapter 5 Decisions.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

26

Chapter 5: Decisions26

De Morgan's Law

• !(A && B)x is the same as !A || !B• !(A || B)x is the same as !A && !B• if (!(country.equals("USA") && !state.equals("AK) && !state.equals("HI")))...

• if (!country.equals("USA") || !!state.equals("AK) || !!state.equals("HI"))...

Page 27: ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 5: Decisions 1 Chapter 5 Decisions.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

27

Chapter 5: Decisions27

Boolean Variables

• boolean shipByAir = false;if (!country.equals("USA")) shipByAir = true;else if (state.equals("AK") || state.equals("HI")) shipByAir = true;if (shipByAir) ... else ...

• Boolean variables are sometimes called flags

Page 28: ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 5: Decisions 1 Chapter 5 Decisions.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

28

Chapter 5: Decisions28

Boolean do's and don'ts

• don't: if (shipByAir == true)...if (shipByAir != false)...

• do:if (shipByAir)...

• don't:if (balance < 0) return true; else return false;

• do:return balance < 0;

Page 29: ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 5: Decisions 1 Chapter 5 Decisions.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

29

Chapter 5: Decisions29

Useful tips

• Brace layout• Indentation and tabs• Copy and paste• Prepare test cases• Make a schedule