Presentation is loading. Please wait.

Presentation is loading. Please wait.

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

Similar presentations


Presentation on theme: "©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 5: Decisions 1 Chapter 5 Decisions."— Presentation transcript:

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

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

3 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 3 Chapter 5: Decisions 3 if statement if(condition) statement if (amount <= balance) balance = balance - amount; statement block: if(amount <= balance) { double newBalance = balance - amount; balance = newBalance }

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

5 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 5 Chapter 5: Decisions 5 if/else statement if(condition) statement else statement if (amount <= balance) balance = balance - amount; else balance = balance - OVERDRAFT_PENALTY;

6 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 6 Chapter 5: Decisions 6 Relational operators like in math = correspond to  == != correspond to =  == is not the same as = : if (x == 5)... x = 5;

7 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 7 Chapter 5: Decisions 7 Comparing floating-point numbers Roundoff errors: double r = Math.sqrt(2) r * r is 2.0000000000000004, not 2 r * r == 2 is false Test if x and y are close enough: |x - y| ,  a small value (e.g. 10 -14.) Not good enough for very small or large values. Use |x - y|  max(|x|, |y|)

8 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 8 Chapter 5: Decisions 8 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"))

9 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 9 Chapter 5: Decisions 9 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)

10 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 10 Chapter 5: Decisions 10 Figure 4 Comparing Objects

11 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 11 Chapter 5: Decisions 11 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"

12 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 12 Chapter 5: Decisions 12 Figure 3 Lexicographic Comparison

13 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 13 Chapter 5: Decisions 13 Multiple alternatives if (condition1) statement1; else if (condition2) statement2; else if (condition3) statement3; else statement4; The first matching condition is executed. Order matters.

14 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 14 Chapter 5: Decisions 14 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; }

15 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 15 Chapter 5: Decisions 15 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; }

16 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 16 Chapter 5: Decisions 16 Nested branches if (condition1) { if (condition1a) statement1a; else statement1b; }

17 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 17 Chapter 5: Decisions 17 Figure 7 Income Tax Computation

18 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 18 Chapter 5: Decisions 18 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()); }

19 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 19 Chapter 5: Decisions 19 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;

20 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 20 Chapter 5: Decisions 20 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); }

21 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 21 Chapter 5: Decisions 21 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; }

22 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 22 Chapter 5: Decisions 22 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

23 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 23 Chapter 5: Decisions 23 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))...

24 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 24 Chapter 5: Decisions 24 Figure 8 Flowcharts for && and || Combinations

25 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 25 Chapter 5: Decisions 25 Truth tables 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

26 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 26 Chapter 5: Decisions 26 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"))...

27 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 27 Chapter 5: Decisions 27 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

28 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 28 Chapter 5: Decisions 28 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;

29 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 29 Chapter 5: Decisions 29 Useful tips Brace layout Indentation and tabs Copy and paste Prepare test cases Make a schedule


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

Similar presentations


Ads by Google