Chapter 5  Decisions 1 Chapter 5 Decisions. Chapter 5  Decisions 2 Chapter Goals  To be able to implement decisions using if statements  To understand.

Slides:



Advertisements
Similar presentations
DECISIONS Chapter 5. The if Statement  Action based on a conditions  If the condition is true, the body of the statement is executed if (amount
Advertisements

Math 130 Decisions II Wed, Sept 12, 2007 Notes: ref. C. Horstmann, Java Concepts.
Chapter 5 – Decisions Big Java by Cay Horstmann
Chapter 5 Decisions Goals To be able to implement decisions using if statements To be able to implement decisions using if statements To understand how.
Chapter 6 Horstmann Programs that make decisions: the IF command.
Conditions What if?. Flow of Control The order of statement execution is called the flow of control Unless specified otherwise, the order of statement.
COMP 14 Introduction to Programming Miguel A. Otaduy May 18, 2004.
Computer Science A 3: 10/2. Logical Expressions Expressions that has a value which is either true or false. Logical expressions are essential in a program.
If Statement if (amount
Chapter 5 – Decisions Big Java by Cay Horstmann Copyright © 2009 by John Wiley & Sons. All rights reserved.
Logical Operators and Conditional statements
C++ for Engineers and Scientists Third Edition
Chapter 6 Decisions. Chapter Goals To be able to implement decisions using if statements To understand how to group statements into blocks To learn how.
CSM-Java Programming-I Spring,2005 Control Flow Lesson - 3.
Chapter 5 Conditionals and Loops. © 2004 Pearson Addison-Wesley. All rights reserved2/33 Conditionals and Loops Now we will examine programming statements.
Chapter 5: Decisions. To be able to implement decisions using if statements To understand how to group statements into blocks To learn how to compare.
Chapter 6 - Decisions. Characters char char primitive data type primitive data type stores a single character stores a single character operations (same.
COM S 207 IF Statement Instructor: Ying Cai Department of Computer Science Iowa State University
Chapter 5 Decisions. Assignments  Written exercises pp 217 – 220 R5.1, R5.3, R5.5, R5.6, R5.9 – R5.15, R5.17, R R5.1, R5.3, R5.5, R5.6, R5.9 –
Chapter Goals To implement decisions using if statements
Copyright © 2014 by John Wiley & Sons. All rights reserved.1 Decisions and Iterations.
1 Chapter 4: Selection Structures. In this chapter, you will learn about: – Selection criteria – The if-else statement – Nested if statements – The switch.
Big Java by Cay Horstmann Copyright © 2009 by John Wiley & Sons. All rights reserved. if (amount
Decisions CS 21a: Introduction to Computing I Department of Information Systems and Computer Science Ateneo de Manila University (Chapter 5, Horstmann*
Decisions: Handling Infinite Cases CS 21a: Introduction to Computing I First Semester,
The while Loop Syntax while (condition) { statements } As long condition is true, the statements in the while loop execute.
The while Loop Syntax while (condition) { statements } As long condition is true, the statements in the while loop execute.
Flow of Control Part 1: Selection
Making Decisions Chapter 5.  Thus far we have created classes and performed basic mathematical operations  Consider our ComputeArea.java program to.
1 Chapter 7: Advanced Control Flow  Chapter Goals To recognize the correct ordering of decisions in multiple branchesTo recognize the correct ordering.
Making Decisions (True or False) Relational Operators >greater than =greater than or equal to
Introduction to Programming Prof. Rommel Anthony Palomino Department of Computer Science and Information Technology Spring 2011.
©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 5: Decisions 1 Chapter 5 Decisions.
Fall 2006Slides adapted from Java Concepts companion slides1 Decisions Advanced Programming ICOM 4015 Lecture 5 Reading: Java Concepts Chapter 6.
©TheMcGraw-Hill Companies, Inc. Permission required for reproduction or display. Selection Statements Selection Switch Conditional.
If Statement if (amount
Week 7 Introduction to Computer Science and Object-Oriented Programming COMP 111 George Basham.
Copyright © 2013 by John Wiley & Sons. All rights reserved. DECISIONS CHAPTER Slides by Donald W. Smith TechNeTrain.com Final Draft Oct 15,
ICT Introduction to Programming Chapter 4 – Control Structures I.
Chapter 6 Decisions. Chapter Goals To be able to implement decisions using if statements To understand how to group statements into blocks To learn how.
Week 7 Introduction to Computer Science and Object-Oriented Programming COMP 111 George Basham.
Decisions Bush decision making.
Control statements Mostafa Abdallah
Copyright © 2014 by John Wiley & Sons. All rights reserved.1 Decisions and Iterations.
A First Book of C++ Chapter 4 Selection. Objectives In this chapter, you will learn about: –Relational Expressions –The if-else Statement –Nested if Statements.
Decision Statements, Short- Circuit Evaluation, Errors.
Control Statements: Part1  if, if…else, switch 1.
1 Flow of Control Chapter 5. 2 Objectives You will be able to: Use the Java "if" statement to control flow of control within your program.  Use the Java.
Copyright © 2014 by John Wiley & Sons. All rights reserved.1 Decisions and Iterations.
Copyright © 2014 by John Wiley & Sons. All rights reserved.1 Chapter 5 - Decisions.
C++ for Engineers and Scientists Second Edition Chapter 4 Selection Structures.
A First Book of C++ Chapter 4 Selection.
Boolean expressions and if-else statements
Selection (also known as Branching) Jumail Bin Taliba by
Chapter Goals To implement decisions using if statements
Control Structures Combine individual statements into a single logical unit with one entry point and one exit point. Used to regulate the flow of execution.
5.3 Multiple Alternatives (Part 1)
Chapter 4: Making Decisions.
Chapter 5 – Decisions.
Nested Branches Nested set of statements: Example: Federal Income Tax
Chapter 4: Making Decisions.
Chapter 5/6 Decisions.
DECISIONS.
Chapter 5 – Decisions Big Java by Cay Horstmann
Chapter 3 Selections Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved.
Chapter 6 - Decisions.
Chapter 5 – Decisions Big Java by Cay Horstmann
Controlling Program Flow
Control Structure.
Presentation transcript:

Chapter 5  Decisions 1 Chapter 5 Decisions

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

Chapter 5  Decisions 3 The if Statement  The if statement lets a program carry out different actions depending on a condition if (amount <= balance) balance = balance - amount;

Chapter 5  Decisions 4 The if Statement Figure 1: Flowchart for an if statement

Chapter 5  Decisions 5 The if/else Statement if (amount <= balance) balance = balance - amount; else balance = balance - OVERDRAFT_PENALTY;  Why doesn’t this work?  Use if/else to choose between alternatives if (amount balance) balance = balance - OVERDRAFT_PENALTY;

Chapter 5  Decisions 6 The if/else Statement Figure 2: Flowchart for an if/else statement

Chapter 5  Decisions 7 Statement Types  Simple statement  Compound statement  Other examples in Java: while, for, etc. (loop statements, discussed in Chapter 7) balance = balance - amount; if (balance >= amount) balance = balance - amount;

Chapter 5  Decisions 8 Statement Types  Block statement: enclose multiple simple statements in { … }  For example { double newBalance = balance - amount; balance = newBalance; } if (amount <= balance) { double newBalance = balance - amount; balance = newBalance; }

Chapter 5  Decisions 9 Syntax 6.1: The if Statement if(condition) statement if (condition) statement1 else statement2 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

Chapter 5  Decisions 10 Syntax 6.2: Block Statement { statement 1 statement 2... } Example: { double newBalance = balance - amount; balance = newBalance; } Purpose: To group several statements together to form a single statement

Chapter 5  Decisions 11 Brace Layout  Compiler doesn’t care how braces align  For human readability, make braces line up  Good idea to use braces for all if statements if (amount <= balance){ double newBalance = balance - amount; balance = newBalance; } if (amount <= balance) { double newBalance = balance - amount; balance = newBalance; }

Chapter 5  Decisions 12 Brace Layout  In fact, for the code you write in this class, you must use braces with all if statements  Even if braces not required by Java syntax  For example, this is good…  But this will lose points… if (amount <= balance) { double newBalance = balance - amount; } if (amount <= balance) double newBalance = balance - amount;

Chapter 5  Decisions 13 Brace Layout  You must also be able to read code when braces are not used with if statements  Since braces not always required by Java syntax  In slides and book, braces are often omitted  But always use braces in if statements for code you write in this class  Got it?

Chapter 5  Decisions 14 Self-Check 1. Why did we use the condition amount <= balance and not amount < balance in if/else example? 2. What is wrong with the statement and how can you fix it? Is this a logic or syntax error? if (amount <= balance) newBalance = balance - amount; balance = newBalance;

Chapter 5  Decisions 15 Answers 1. If the withdrawal amount equals the balance, the result should be a zero balance and no penalty 2. Only the first assignment statement is part of the if statement. Use braces to group both assignment statements into a block statement. It is a logic error.

Chapter 5  Decisions 16 Selection Operator  A shorthand way to do if/else  value1 result of “ if ”  value2 result of “ else ”  For example can be used in place of if/else construct condition ? value1 : value2 y = x >= 0 ? x : -x; if(x >= 0) y = x; else y = -x;

Chapter 5  Decisions 17 Comparing Values: Relational Operators  Relational operators compare values  The == operator denotes equality testing JavaMath NotationDescription >> Greater than >=≥ Greater than or equal << Less than <=≤ Less than or equal === Equal !=≠ Not equal a = 5; // Assign 5 to a if (a == 5)... // Test whether a equals 5

Chapter 5  Decisions 18 Comparing Values: Relational Operators  “ == “ often leads to errors  For example  This is probably what was intended a = 5; // Assign 5 to a if (a = 5)... // what happens here? a = 5; // Assign 5 to a if (a == 5)... // Test whether a == 5

Chapter 5  Decisions 19 Comparing Floating-Point Numbers  Consider the code  This code prints 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 not 0 but " + d); sqrt(2)squared minus 2 is not 0 but E-16

Chapter 5  Decisions 20 Comparing Floating-Point Numbers  To avoid roundoff errors, do not use == to compare floating-point numbers  To compare floating-point numbers test whether they are close enough: |x - y| ≤  where  is a small number such as final double EPSILON = 1E-14; if (Math.abs(x - y) <= EPSILON) // x is approximately equal to y

Chapter 5  Decisions 21 Comparing Strings  Do not use == for strings!  Instead, use equals method  For strings (objects) == tests identity, while equals tests equal content  Case insensitive test ( "Y" or "y" ) if (input == "Y") // WRONG!!! if (input.equals("Y")) if (input.equalsIgnoreCase("Y"))

Chapter 5  Decisions 22 Comparing Strings  Do not ever use == for strings!  Can lead to subtle errors  For example since one string object for any constant, but String nickname = “Rob”; if(nickname == “Rob”) // test is true String name = “Robert”; String nickname = name.substring(0,3); if(nickname == “Rob”) // test is false

Chapter 5  Decisions 23 Comparing Strings  s.compareTo(t) < 0 means string s comes before string t in the dictionary  For example, "car" comes before "cargo"  All uppercase letters come before lowercase: "Hello" comes before "car"

Chapter 5  Decisions 24 Lexicographic Comparison Figure 3: Lexicographic Comparison

Chapter 5  Decisions 25 Comparing Objects  == tests for identity  equals tests for identical content  box1 != box3  box1.equals(box3)  Works only if equals defined for the class!  box1 == box2 Rectangle box1 = new Rectangle(5, 10, 20, 30); Rectangle box2 = box1; Rectangle box3 = new Rectangle(5, 10, 20, 30);

Chapter 5  Decisions 26 Object Comparison Figure 4: Comparing Object References

Chapter 5  Decisions 27 Testing for null  null refers to no object  Can be useful in tests String middleInitial = null; // Not set if (... ) middleInitial = middleName.substring(0, 1); if (middleInitial == null) System.out.println(firstName + " " + lastName); else System.out.println(firstName + " " + middleInitial + ". " + lastName);

Chapter 5  Decisions 28 Testing for null  Use ==, not equals, to test for null  null is not the same as the empty string ""

Chapter 5  Decisions 29 Self Check 3. What is value of s.length() if s is a) the empty string, ""? b) the string " " (containing a single space)? c) null ?

Chapter 5  Decisions 30 Self-Check String a = "1"; String b = "one"; double x = 1; double y = 3 * (1.0 / 3); a)a == "1" b)a == null c)a.equals("") d)a == b e)a == x f)x == y g)x - y == null h)x.equals(y) 4. Which of the following comparisons are syntactically incorrect? Which of them are syntactically correct, but logically questionable?

Chapter 5  Decisions 31 Answers 3. a) 0; b) 1; c) an exception (error) is “thrown” 4. Syntactically incorrect: e, g, h Logically questionable: a, d, f

Chapter 5  Decisions 32 Multiple Alternatives: Sequences of Comparisons   The first matching condition is executed  The order matters! if (condition1) statement1; else if (condition2) statement2;... else statement4; if (richter >= 0) // always passes r = "Generally not felt by people"; else if (richter >= 3.5) // not tested r = "Felt by many people";...

Chapter 5  Decisions 33 Multiple Alternatives: Sequences of Comparisons  Do not omit else  What happens here when richter is, say, 8.5? if (richter >= 8.0) r = "Most structures fall"; if (richter >= 7.0) // omitted else--ERROR r = "Many buildings destroyed";

Chapter 5  Decisions 34 File Earthquake.java 01: /** 02: A class that describes the effects of an earthquake. 03: */ 04: public class Earthquake 05: { 06: /** 07: Constructs an Earthquake object. magnitude the magnitude on the Richter scale 09: */ 10: public Earthquake(double magnitude) 11: { 12: richter = magnitude; 13: } 14: 15: /** 16: Gets a description of the effect of the earthquake. the description of the effect 18: */ Continued…

Chapter 5  Decisions 35 File Earthquake.java 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: } Continued…

Chapter 5  Decisions 36 File Earthquake.java 38: 39: private double richter; 40: }

Chapter 5  Decisions 37 File EarthquakeTester.java 01: import java.util.Scanner; 02: 03: /** 04: A class to test the Earthquake class. 05: */ 06: public class EarthquakeTester 07: { 08: public static void main(String[] args) 09: { 10: Scanner in = new Scanner(System.in); 11: 12: System.out.print("Enter a magnitude on the Richter scale: "); 13: double magnitude = in.nextDouble(); 14: Earthquake quake = new Earthquake(magnitude); 15: System.out.println(quake.getDescription()); 16: } 17: }

Chapter 5  Decisions 38 Multiple Alternatives: Nested Branches  Branch inside another branch  Braces { … } are especially important here! if (condition1) { if (condition1a) statement1a; else statement1b; } else statement2;

Chapter 5  Decisions 39 Tax Schedule If your filing status is singleIf your filing status is married Tax BracketPercentageTax BracketPercentage $0 … $21,45015%$0 … $35,80015% Amount over $21,451, up to $51,900 28%Amount over $35,800, up to $86,500 28% Amount over $51,90031%Amount over $86,50031%

Chapter 5  Decisions 40 Nested Branches  Compute taxes due, given filing status and income figure: (1) branch on the filing status, (2) for each filing status, branch on income level  The two-level decision process is reflected in two levels of if statements  We say that the income test is nested inside the test for filing status

Chapter 5  Decisions 41 Nested Branches Figure 5: Income Tax Computation Using 1992 Schedule

Chapter 5  Decisions 42 File TaxReturn.java 01: /** 02: A tax return of a taxpayer in : */ 04: public class TaxReturn 05: { 06: /** 07: Constructs a TaxReturn object for a given income and 08: marital status. anIncome the taxpayer income aStatus either SINGLE or MARRIED 11: */ 12: public TaxReturn(double anIncome, int aStatus) 13: { 14: income = anIncome; 15: status = aStatus; 16: } 17: Continued…

Chapter 5  Decisions 43 File TaxReturn.java 18: public double getTax() 19: { 20: double tax = 0; 21: 22: if (status == SINGLE) 23: { 24: if (income <= SINGLE_BRACKET1) 25: tax = RATE1 * income; 26: else if (income <= SINGLE_BRACKET2) 27: tax = RATE1 * SINGLE_BRACKET1 28: + RATE2 * (income - SINGLE_BRACKET1); 29: else 30: tax = RATE1 * SINGLE_BRACKET1 31: + RATE2 * (SINGLE_BRACKET2 – SINGLE_BRACKET1) 32: + RATE3 * (income - SINGLE_BRACKET2); 33: } Continued…

Chapter 5  Decisions 44 File TaxReturn.java 34: else 35: { 36: if (income <= MARRIED_BRACKET1) 37: tax = RATE1 * income; 38: else if (income <= MARRIED_BRACKET2) 39: tax = RATE1 * MARRIED_BRACKET1 40: + RATE2 * (income - MARRIED_BRACKET1); 41: else 42: tax = RATE1 * MARRIED_BRACKET1 43: + RATE2 * (MARRIED_BRACKET2 - MARRIED_BRACKET1) 44: + RATE3 * (income - MARRIED_BRACKET2); 45: } 46: 47: return tax; 48: } 49: 50: public static final int SINGLE = 1; 51: public static final int MARRIED = 2; 52: Continued…

Chapter 5  Decisions 45 File TaxReturn.java 53: private static final double RATE1 = 0.15; 54: private static final double RATE2 = 0.28; 55: private static final double RATE3 = 0.31; 56: 57: private static final double SINGLE_BRACKET1 = 21450; 58: private static final double SINGLE_BRACKET2 = 51900; 59: 60: private static final double MARRIED_BRACKET1 = 35800; 61: private static final double MARRIED_BRACKET2 = 86500; 62: 63: private double income; 64: private int status; 65: }

Chapter 5  Decisions 46 File TaxReturnTester.java 01: import java.util.Scanner; 02: 03: /** 04: A class to test the TaxReturn class. 05: */ 06: public class TaxReturnTester 07: { 08: public static void main(String[] args) 09: { 10: Scanner in = new Scanner(System.in); 11: 12: System.out.print("Please enter your income: "); 13: double income = in.nextDouble(); 14: 15: System.out.print("Please enter S (single) or M (married): "); 16: String input = in.next(); 17: int status = 0; 18:

Chapter 5  Decisions 47 File TaxReturnTester.java 19: if (input.equalsIgnoreCase("S")) 20: status = TaxReturn.SINGLE; 21: else if (input.equalsIgnoreCase("M")) 22: status = TaxReturn.MARRIED; 23: else 24: { 25: System.out.println("Bad input."); 26: return; 27: } 28: 29: TaxReturn aTaxReturn = new TaxReturn(income, status); 30: 31: System.out.println("The tax is " 32: + aTaxReturn.getTax()); 33: } 34: }

Chapter 5  Decisions 48 File TaxReturnTester.java Please enter your income: Please enter S (single) or M (married): S The tax is Output

Chapter 5  Decisions 49 Self Check 5. The if/else statement for the earthquake strength first tested for higher values, then descended to lower values. Can you reverse that order? 6. Some people object to higher tax rates for higher incomes, claiming that you might end up with less money after taxes when you get a raise for working hard. What is the flaw in this argument?

Chapter 5  Decisions 50 Answers 5. Yes, if you also reverse the comparisons: if (richter < 3.5) r = "Generally not felt by people"; else if (richter < 4.5) r = "Felt by many people, no destruction"; else if (richter < 6.0) r = "Damage to poorly constructed buildings";...

Chapter 5  Decisions 51 Answers 6. The higher tax rate is only applied on the income in the higher bracket. Suppose you are single and make $51,800. Should you try to get a $200 raise? Absolutely–you get to keep 72% of the first $100 and 69% of the next $100

Chapter 5  Decisions 52 Using Boolean Expressions: The boolean Type  George Boole ( )  Pioneer in the study of logic  Value of expression such as amount < 1000  Either true or false  boolean date type  One of these 2 truth values: true or false

Chapter 5  Decisions 53 Using Boolean Expressions: The boolean Type

Chapter 5  Decisions 54 Using Boolean Expressions: Predicate Method  A predicate method returns a boolean value  Useful in conditions such as public boolean isOverdrawn() { return balance < 0; } if (harrysChecking.isOverdrawn())...

Chapter 5  Decisions 55 Using Boolean Expressions: Predicate Method  Useful predicate methods in Character class   Useful predicate methods in Scanner class hasNextInt() and hasNextDouble() isDigit isLetter isUpperCase isLowerCase if (Character.isUpperCase(ch))... if (in.hasNextInt()) n = in.nextInt();

Chapter 5  Decisions 56 Using Boolean Expressions: The Boolean Operators  && and  || or  ! not  if (0 < amount && amount < 1000)... if (input.equals("S") || input.equals("M"))...

Chapter 5  Decisions 57 && and || Operators Figure 6: Flowcharts for && and || Combinations

Chapter 5  Decisions 58 Truth Tables ABA||B TrueAnyTrue FalseTrue False ABA&&B True False AnyFalse A!A TrueFalse True  Java uses “short circuit evaluation

Chapter 5  Decisions 59 Using Boolean Variables  Example:  Set to truth value:  Use in conditionals: married = input.equals("M"); private boolean married; if (married)... else... if (!married)...

Chapter 5  Decisions 60 Using Boolean Variables  Also called a flag  It is considered gauche to write a test such as  Just use the simpler expression if (married == true)... // Not cool if (married)...

Chapter 5  Decisions 61 Self Check 7. When does the statement print false ? 8. Rewrite the following expression, avoiding the comparison with false System.out.println (x > 0 || x < 0); if (Character.isDigit(ch) == false)...

Chapter 5  Decisions 62 Answers 7. When x is zero 8. if (!Character.isDigit(ch))...

Chapter 5  Decisions 63 De Morgan’s Laws  !(A && B) is the same as (!A)||(!B)  !(A || B) is the same as (!A)&&(!B)

Chapter 5  Decisions 64 switch Statement  The switch must be an int (see pp )  A shortcut for a sequence of if/else if int digit;... switch (digit) { case 1: System.out.println(“one”); break; case 2: System.out.println(“two”); break; default: System.out.println(“try again”); break; } int digit;... if (digit == 1) System.out.println(“one”); else if (digit == 2) System.out.println(“two”); else System.out.println(“try again”);