Decisions - PowerPoint PPT Presentation

1 / 51
About This Presentation
Title:

Decisions

Description:

'car'comes before 'cargo' 'cargo' comes before 'cathode' ... 'Hello' comes before 'car' Lexicographic Comparison. Object Comparison ... – PowerPoint PPT presentation

Number of Views:18
Avg rating:3.0/5.0
Slides: 52
Provided by: Facu148
Category:
Tags: decisions

less

Transcript and Presenter's Notes

Title: Decisions


1
Chapter 5
  • Decisions

2
Chapter Goals
  • To be able to implement decisions using if
    statements
  • To understand how to group statements into blocks
  • To learn how to compare integers, floating-point
    numbers, strings, and objects
  • To recognize the correct ordering of decisions in
    multiple branches
  • To program conditions using Boolean operators and
    variables

3
if Statement
  • if (amount lt balance) balance balance -
    amount

4
if/else Statement
  • if (amount lt balance) balance balance -
  • amount
  • else balance balance - OVERDRAFT_PENALTY

5
Block Statement
  • if (amount lt balance)
  • double newBalance balance - amount
    balance newBalance

6
Syntax 5.1. The if Statement
  • if(condition)statement
  • if (condition)statement
  • elsestatement
  • Example
  • if (amount lt balance) balance balance -
    amount

7
  • if (amount lt balance) balance balance -
    amountelse balance balance -
    OVERDRAFT_PENALTY
  • Purpose
  • To execute a statement when a condition is true
    or false

8
Syntax 5.2. Block Statement
  • statement. . .
  • Example
  • double newBalance balance - amount
  • balance newBalance
  • Purpose
  • To group several statements together to form a
    single statement

9
Statement Types
  • Simple statementbalance balance - amount
  • Compound statementif (balance gt amount) balance
    balance - amountAlso while, for, etc. (see
    chapter 6)
  • Block statementdouble newBalance balance -
    amountbalance newBalance

10
Relational Operators
11
Equality Testing vs. Assignment
  • The operator tests for equalityif (x 0)
    . . // if x equals zero
  • The operator assigns a value to a variablex
    0 // assign 0 to x
  • Don't confuse them.
  • Java is the same as mathematical

12
Comparing Floating-Point Numbers
  • Consider this code
  • 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)

13
  • It printssqrt(2)squared minus 2 is not 0 but
    4.440892098500626E-16
  • Don't use to compare floating-point numbers

14
Comparing Floating-Point Numbers
  • Two numbers are close to another if x - y lt e
  • e is a small number such as 10-14
  • Not good enough if x, y very large or very small.
    Then usex - y / max(x, y) lt e
  • But if one of the numbers is zero, don't divide
    by max(x , y)

15
String Comparison
  • Don't use for strings!if (input "Y") //
    WRONG!!!
  • Use equals methodif (input.equals("Y"))
  • tests identity, equals tests equal contents
  • Case insensitive test ("Y" or "y")if
    (input.equalsIgnoreCase("Y"))

16
Lexicographic Comparison
  • s.compareTo(t) lt 0 means s comes before t in
    the dictionary
  • "car"comes before "cargo" "cargo" comes before
    "cathode"
  • All uppercase letters come before lowercase
    "Hello" comes before "car"

17
Lexicographic Comparison
18
Object Comparison
  • tests for identity, equals for identical
    content
  • Rectangle cerealBox new Rectangle(5, 10, 20,
    30)Rectangle oatmealBox new Rectangle(5, 10,
    20, 30)Rectangle r cerealBox
  • cerealBox ! oatmealBox, but cerealBox.equals(oat
    mealBox)
  • cerealBox r
  • Caveat equals must be defined for the class (see
    chapter 11)

19
Object Comparison
20
The null Reference
  • null reference refers to no object at all
  • Can be used in testsif (account null) . . .
  • Use , not equals, to test for null
  • showInputDialog returns null if the user hit the
    cancel buttonString input JOptionPane.showInpu
    tDialog("...")if (input ! null) ...
  • null is not the same as the empty string ""

21
Multiple Alternatives
  • if (condition1)statement1else if
    (condition2)statement2else if
    (condition3)statement3elsestatement4
  • The first matching condition is executed.
  • Order matters.

22
File Earthquake.java
  • 1 /
  • 2 A class that describes the effects of an
    earthquake.
  • 3 /
  • 4 public class Earthquake
  • 5
  • 6 /
  • 7 Constructs an Earthquake object.
  • 8 _at_param magnitude the magnitude on the Richter
    scale
  • 9 /

23
  • 10 public Earthquake(double magnitude)
  • 11
  • 12 richter magnitude
  • 13
  • 14
  • 15 /
  • 16 Gets a description of the effect of the
    earthquake.
  • 17 _at_return the description of the effect
  • 18 /
  • 19 public String getDescription()
  • 20
  • 21 String r

24
  • 22 if (richter gt 8.0)
  • 23 r "Most structures fall"
  • 24 else if (richter gt 7.0)
  • 25 r "Many buildings destroyed"
  • 26 else if (richter gt 6.0)
  • 27 r "Many buildings considerably damaged, some
    collapse"
  • 28 else if (richter gt 4.5)
  • 29 r "Damage to poorly constructed buildings"
  • 30 else if (richter gt 3.5)
  • 31 r "Felt by many people, no destruction"

25
  • 32 else if (richter gt 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

26
File EarthquakeTest.java
  • 1 import javax.swing.JOptionPane
  • 2
  • 3 /
  • 4 A class to test the Earthquake class.
  • 5 /
  • 6 public class EarthquakeTest
  • 7

27
  • 8 public static void main(String args)
  • 9
  • 10 String input JOptionPane.showInputDialog(
  • 11 "Enter a magnitude on the Richter scale")
  • 12 double magnitude Double.parseDouble(input)
  • 13 Earthquake quake new Earthquake(magnitude)
  • 14 System.out.println(quake.getDescription())
  • 15 System.exit(0)
  • 16
  • 17

28
Multiple Alternatives
  • Order mattersif (richter gt 0) // always
    passesr "Generally not felt by people"else
    if (richter gt 3.5) // not testedr "Felt by
    many people, no destruction". . .
  • Don't omit elseif (richter gt 8.0)r "Most
    structures fall"if (richter gt 7.0) // omitted
    else--ERRORr "Many buildings destroyed

29
Nested Branches
  • Branch inside another branch
  • if (condition1) if (condition1a)
    statement1a else statement1belse
    statement2

30
Tax Return
  • If your filing status is Single

31
  • If your filing status is Married

32
Tax Return
33
File TaxReturn.java
  • 1 /
  • 2 A tax return of a taxpayer in 1992.
  • 3 /
  • 4 class TaxReturn
  • 5
  • 6 /
  • 7 Constructs a TaxReturn object for a given
    income and
  • 8 marital status.
  • 9 _at_param anIncome the taxpayer income
  • 10 _at_param aStatus either SINGLE or MARRIED
  • 11 /

34
  • 12 public TaxReturn(double anIncome, int aStatus)
  • 13
  • 14 income anIncome
  • 15 status aStatus
  • 16
  • 17
  • 18 public double getTax()
  • 19
  • 20 double tax 0
  • 21

35
  • 22 if (status SINGLE)
  • 23
  • 24 if (income lt SINGLE_CUTOFF1)
  • 25 tax RATE1 income
  • 26 else if (income lt SINGLE_CUTOFF2)
  • 27 tax SINGLE_BASE2
  • 28 RATE2 (income - SINGLE_CUTOFF1)
  • 29 else
  • 30 tax SINGLE_BASE3
  • 31 RATE3 (income - SINGLE_CUTOFF2)
  • 32

36
  • 33 else
  • 34
  • 35 if (income lt MARRIED_CUTOFF1)
  • 36 tax RATE1 income
  • 37 else if (income lt MARRIED_CUTOFF2)
  • 38 tax MARRIED_BASE2
  • 39 RATE2 (income - MARRIED_CUTOFF1)
  • 40 else
  • 41 tax MARRIED_BASE3
  • 42 RATE3 (income - MARRIED_CUTOFF2)
  • 43

37
  • 44
  • 45 return tax
  • 46
  • 47
  • 48 public static final int SINGLE 1
  • 49 public static final int MARRIED 2
  • 50
  • 51 private static final double RATE1 0.15
  • 52 private static final double RATE2 0.28
  • 53 private static final double RATE3 0.31
  • 54

38
  • 55 private static final double SINGLE_CUTOFF1
    21450
  • 56 private static final double SINGLE_CUTOFF2
    51900
  • 57
  • 58 private static final double SINGLE_BASE2
    3217.50
  • 59 private static final double SINGLE_BASE3
    11743.50
  • 60 private static final double MARRIED_CUTOFF1
    35800
  • 61 private static final double MARRIED_CUTOFF2
    86500

39
  • 62
  • 63 private static final double MARRIED_BASE2
    5370
  • 64 private static final double MARRIED_BASE3
    19566
  • 65
  • 66 private double income
  • 67 private int status
  • 68

40
File TaxReturnTest.java
  • 1 import javax.swing.JOptionPane
  • 2
  • 3 /
  • 4 A class to test the TaxReturn class.
  • 5 /
  • 6 public class TaxReturnTest
  • 7
  • 8 public static void main(String args)
  • 9

41
  • 10 String input JOptionPane.showInputDialog(
  • 11 "Please enter your income")
  • 12 double income Double.parseDouble(input)
  • 13
  • 14 input JOptionPane.showInputDialog(
  • 15 "Please enter S (single) or M (married)")
  • 16 int status 0
  • 17
  • 18 if (input.equalsIgnoreCase("S"))
  • 19 status TaxReturn.SINGLE
  • 20 else if (input.equalsIgnoreCase("M"))
  • 21 status TaxReturn.MARRIED

42
  • 22 else
  • 23
  • 24 System.out.println("Bad input.")
  • 25 System.exit(0)
  • 26
  • 27
  • 28 TaxReturn aTaxReturn new TaxReturn(income,
    status)
  • 29
  • 30 System.out.println("The tax is "
  • 31 aTaxReturn.getTax())

43
  • 32
  • 33 System.exit(0)
  • 34
  • 35

44
The boolean Type
  • George Boole (1815-1864) pioneer in the study of
    logic
  • value of expression amount lt 1000 is true or
    false.
  • boolean type one of these 2 truth values

45
Predicate Method
  • return type boolean
  • Examplepublic boolean isOverdrawn() return
    balance lt 0
  • Use in conditionsif (harrysChecking.isOverdrawn()
    ) ...
  • Useful predicate methods in Character
    classisDigitisLetterisUpperCaseisLowerCase
  • if (Character.isUpperCase(ch)) ...

46
Boolean Operators
  • and
  • or
  • ! not
  • if (0 lt amount amount lt 1000) ...
  • if (input.equals("S") input.equals("M")) ...

47
and Operators
48
Truth Tables
49
(No Transcript)
50
De Morgan's Law
  • Negating a complex condition can be confusingif
    (!(0 lt amount amount lt 1000))
  • De Morgan's law states that!(A B) is the same
    as !A !B!(A B) is the same as !A !B
  • Note that the and flip when moving the !
    inwards
  • (!(0 lt amount amount lt 1000)) is!(0 lt amount)
    !(amount lt 1000) , that is0 gt amount
    amount gt 1000
  • Note that the opposite of lt is gt

51
Boolean Variables
  • private boolean married
  • Set to truth valuemarried input.equals("M")
  • Use in conditionsif (married) ... else ...if
    (!married) ...
  • Also called flag
  • Don't test Boolean variables against truth
    values--sign of cluelessnessif (married
    true) // DON'Tif (married false) // DON'Tif
    (married ! false) // NO!!!
Write a Comment
User Comments (0)
About PowerShow.com