Chapter 5

Decisions


Chapter Goals

if Statement

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

if/else Statement

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


Block Statement

if (amount <= balance)
{
double newBalance = balance - amount;
balance = newBalance;
}

Syntax 5.1. The if Statement

  if(condition)
   statement

if
(condition)
   statement

else
   statement

Example:

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

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

Purpose:

To execute a statement when a condition is true or false

Syntax 5.2. Block Statement

  {
   statement
   statement
   . . .

}


Example:

 
{
      double newBalance = balance - amount;
   balance = newBalance;
}

Purpose:

To group several statements together to form a single statement

Statement Types

Relational Operators

Java
Math Notation
Description
>
>
Greater than
>=

Greater than or equal
<
<
Less than
<=

Less than or equal
==
=
Equal
!=

Not equal


Equality Testing vs. Assignment


Comparing Floating-Point Numbers

Comparing Floating-Point Numbers

String Comparison

Lexicographic Comparison

Lexicographic Comparison


Object Comparison

Object Comparison


The null Reference

Multiple Alternatives

File Earthquake.java

1/**
2   A class that describes the effects of an earthquake.
3*/
4public class Earthquake
5{  
6   /**
7      Constructs an Earthquake object.
8      @param magnitude the magnitude on the Richter scale
9   */
10   public Earthquake(double magnitude)
11   {  
12      richter = magnitude;
13   }
14
15   /**
16      Gets a description of the effect of the earthquake.
17      @return the description of the effect
18   */
19   public String getDescription()
20   {
21      String r;
22      if (richter >= 8.0)
23         r = "Most structures fall";
24      else if (richter >= 7.0)
25         r = "Many buildings destroyed";
26      else if (richter >= 6.0)
27         r = "Many buildings considerably damaged, some collapse";
28      else if (richter >= 4.5)
29         r = "Damage to poorly constructed buildings";
30      else if (richter >= 3.5)
31         r = "Felt by many people, no destruction";
32      else if (richter >= 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}

File EarthquakeTest.java

1import javax.swing.JOptionPane;
2
3/**
4   A class to test the Earthquake class.
5*/
6public class EarthquakeTest
7{  
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}

Multiple Alternatives

Nested Branches

Tax Return

If your filing status is Single

If the taxable income is over
But not over
The tax is
Of the amount over
$0
$21,450
15%
$0
$21,450
$51,900
$3,217.50 + 28%
$21,450
$51,900

$11,743.50 + 31%
$51,900

If your filing status is Married

If the taxable income is over
But not over
The tax is
Of the amount over
$0
$35,800
15%
$0
$35,800
$86,500
$5,370.00 + 28%
$35,800
$86,500

$19,566.00 + 31%
$86,500

Tax Return


File TaxReturn.java

1/**
2   A tax return of a taxpayer in 1992.
3*/
4class TaxReturn
5{  
6   /**
7      Constructs a TaxReturn object for a given income and 
8      marital status.
9      @param anIncome the taxpayer income
10      @param aStatus either SINGLE or MARRIED
11   */   
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
22      if (status == SINGLE)
23      {  
24         if (income <= SINGLE_CUTOFF1)
25            tax = RATE1 * income;
26         else if (income <= SINGLE_CUTOFF2)
27            tax = SINGLE_BASE2
28               + RATE2 * (income - SINGLE_CUTOFF1);
29         else
30            tax = SINGLE_BASE3
31               + RATE3 * (income - SINGLE_CUTOFF2);
32      }
33      else
34      {  
35         if (income <= MARRIED_CUTOFF1)
36            tax = RATE1 * income;
37         else if (income <= MARRIED_CUTOFF2)
38            tax = MARRIED_BASE2
39               + RATE2 * (income - MARRIED_CUTOFF1);
40         else
41            tax = MARRIED_BASE3
42               + RATE3 * (income - MARRIED_CUTOFF2);
43      }
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
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;
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}

File TaxReturnTest.java

1import javax.swing.JOptionPane;
2
3/**
4   A class to test the TaxReturn class.
5*/
6public class TaxReturnTest
7{  
8   public static void main(String[] args)
9   {  
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;
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());
32
33      System.exit(0);
34   }
35}

The boolean Type

Predicate Method

Boolean Operators

&& and || Operators


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

De Morgan's Law

Boolean Variables