©2000, john wiley & sons, inc. horstmann/java essentials, 2/e 1 chapter 5: decisions 1 chapter...
Post on 04-Jan-2016
214 Views
Preview:
TRANSCRIPT
©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e
1
Chapter 5: Decisions1
Chapter 5
Decisions
©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e
2
Chapter 5: Decisions2
Figure 1A Decision
©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}
©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e
4
Chapter 5: Decisions4
Figure 2Alternative Conditions
©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;
©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;
©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|)
©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"))
©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)
©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e
10
Chapter 5: Decisions10
Figure 4Comparing Objects
©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"
©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e
12
Chapter 5: Decisions12
Figure 3Lexicographic Comparison
©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.
©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; }
©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;}
©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e
16
Chapter 5: Decisions16
Nested branches
• if (condition1){ if (condition1a) statement1a; else statement1b;}
©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e
17
Chapter 5: Decisions17
Figure 7Income Tax Computation
©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()); }}
©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;
©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);}
©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;}
©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
©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))...
©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e
24
Chapter 5: Decisions24
Figure 8Flowcharts for &&and || Combinations
©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
©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"))...
©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
©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;
©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
top related