Download presentation
Presentation is loading. Please wait.
Published byHarvey Dickerson Modified over 9 years ago
1
Decisions: Handling Infinite Cases CS 21a: Introduction to Computing I First Semester, 2013-2014
2
Previously… ► Modularity with procedures and OOP ► Generality with variables
3
Next Set of Lectures… ► Generality with conditionals ► For dealing with infinite test cases (when simple variables and expressions won’t work) ► Generality with loops ► For dealing with infinite (or arbitrary length) processes ► Generality with arrays ► For dealing with infinite (or arbitrary-sized) data
4
Conditional Execution ► Sometimes a simple, linear, clean formula is enough to solve a general problem. ► Sometimes we need to branch because we are forced to handle some subsets of the input cases slightly differently.
5
Conditional Execution ► Java structures for conditions ► The if-statement ► boolean variables, operators, expressions, and methods ► The ? Operator ► The switch-statement
6
The if Statement ► Syntax if (condition) statement ► Notes ► parentheses are required around the condition ► statement means any valid statement in Java (including if-statements and blocks)
7
Example 1 public class BankAccount { private double balance;... public void withdraw( double amount ) { if ( amount <= balance ) balance = balance - amount; System.out.println( "End of Transaction" ); // print statement executed unconditionally }... }
8
Example 2 public class BankAccount { private double balance;... public void withdraw( double amount ) { if ( amount <= balance ) balance = balance - amount; if ( amount > balance ) balance = balance – OVERDRAFT_PENALTY; }... }
9
The Optional else Clause ► If-statement syntax revisited if (condition) statement else statement ► Use whenever an alternative statement should be executed when the condition is not met
10
Example 2, revised: Using the else public class BankAccount { private double balance;... public void withdraw( double amount ) { if ( amount <= balance ) balance = balance - amount; else balance = balance – OVERDRAFT_PENALTY; }... }
11
Example 3 public class BankAccount { private double balance;... public void withdraw( double amount ) { if ( amount <= balance ) balance = balance - amount; else System.out.println( "Insufficient Balance" ); System.out.println( "End of Transaction" ); }... } No penalty is applied but an error message is printed when the condition is not met
12
Example 4 ► Suppose two statements need to be conditionally executed ► Incorrect attempt if ( amount <= balance ) balance = balance - amount; System.out.println("amount deducted"); ► Print statement will be executed unconditionally
13
Block of Statements ► A block allows us to group several statements into one ► place the statements in sequence and surround them with { } ► Correct code if ( amount <= balance ) { balance = balance - amount; System.out.println("amount deducted"); }
14
Brace Layout, White Spaces, and Indentation ► In Java, spaces, tabs, and extra lines don't affect the meaning of the program ► A program could be written in diff ways; e.g., ► all in one line ► such that each word/symbol is in one line ► such that words/symbols are separated by 5 spaces each ► BUT … Spaces (indentation) help to clarify intent
15
Brace Layout if (amount <= balance) { double newBalance = balance – amount; balance = newBalance; } OR if (amount <= balance) { double newBalance = balance – amount; balance = newBalance; }
16
Indentation and Tabs public class BankAccount { private double balance;... public void withdraw( double amount ) { if ( amount <= balance )` balance = balance - amount; else balance = balance – OVERDRAFT_PENALTY; }... } Two to three spaces per indentation
17
Indentation and Tabs public class BankAccount { private double balance;... public void withdraw( double amount ) { if ( amount <= balance ) balance = balance - amount; else balance = balance – OVERDRAFT_PENALTY; }... } Eight spaces per indentation
18
Relational Operators ► Compares two (usually numeric) operands ► >, >=, <, <=, == (equal), != (not equal) ► Example: >= ► binary operation ► returns a boolean result ► true if left operand is greater than or equal to right operand ► false otherwise
19
Practice Programming Problem ► Implement an absolute value function.
20
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 ); ► It prints: sqrt(2)squared minus 2 is not 0 but 4.440892098500626E-16
21
Comparing Floating-Point Numbers ► To avoid round-off errors, don't use == to compare floating-point numbers ► To compare floating-point numbers, test whether they are close enough: |x - y| ≤ ε final double EPSILON = 1E-14; if (Math.abs(x - y) <= EPSILON) // x is approximately equal to y ► ε is a small number such as 10 -14
22
Comparing Strings ► Don't use == for strings! if (input == "Y") // WRONG!!! ► Use equals method: if (input.equals("Y")) ► == tests identity, equals() tests for equal contents ► Case insensitive test ("Y" or "y") if (input.equalsIgnoreCase("Y"))
23
Comparing Strings ► s.compareTo(t) < 0 means: s comes before t in the dictionary ► "car" comes before "cargo" ► All uppercase letters come before lowercase: "Hello" comes before "car"
24
Lexicographic Comparison
25
Practice Programming Problem ► Write a program that reads two words and says if they have the SAME or DIFFERENT starting letter. ► Sample Input Car carrot ► Sample Output SAME
26
Comparing Objects ► Since object variables contain references, == tests for identity, not for identical object content ► BankAccount b = new BankAccount( 1000 ); BankAccount c = new BankAccount( 1000 ); ► Object references are not the same ► b != c ► But contents are equal ► b.getBalance() == c.getBalance()
27
Testing for Null ► null reference refers means no object String middleInitial = null; // not set if (…) middleInitial = middleName.substring(0, 1); ► Can be used in tests: if (middleInitial == null) System.out.println(firstName + " " + lastName); else System.out.println(firstName + " " + middleInitial + ". " + lastName); ► Use ==, not equals(), to test for null ► Note that null is not the same as the empty string ""
28
Sequences of Comparisons ► The statement that corresponds to the first matching condition is executed ► Also called an if-else chain if (condition1) statement1; else if (condition2) statement2;... else statement;
29
Example 5 if ( score >= 92 ) System.out.println( "A" ); else if ( score >= 80 ) System.out.println( "B" ); else if ( score >= 70 ) System.out.println( "C" ); else if ( score >= 60 ) System.out.println( "D" ); else System.out.println( "F" );
30
About the if-else Chain ► Order matters ► if (score >= 60) System.out.println( "D" ); else if (score >= 70) System.out.println( "C" ); … // most students will get D's ► See Richter's scale example in the textbook for another if-else chain ► The if-else chain is an example of a nested branch
31
Practice Programming Problem ► Write a program that reads two numbers and tells if the first is bigger, smaller, or equal to the second one. Print out the absolute difference if they’re not equal. ► Sample Input 1 2 ► Sample Output smaller by 1
32
Nested Branches ► Branch inside another branch if (condition0) if (condition1) statement1a; else statement1b; else statement2; else portion could also contain a nested branch; e.g., if (condition2) statement2a; else statement2b;
33
Example 6 ► Movie ticket price example ► Premium movie (first week of release): P120 ► Regular movie (second week of release or later): P100 ► Senior citizen discount: 20%
34
Example 6 public double TicketPrice( int customerAge, int daysShowing ) { double cost; if (customerAge >= 60) if ( daysShowing < 8 ) cost = 120.0 * 0.80; else cost = 100.0 * 0.80; else if ( daysShowing < 8 ) cost = 120.0; else cost = 100.0; return cost; }
35
The boolean Data Type ► Only two possible values ► true and false ► Literals ► true, false ► lowercase (reserved words in Java) ► Operations ► relational operators ► logical operators
36
Logical Operators ► Boolean operands ► && (and), || (or), ! (unary not) ► Example ((x>=0) && (x<=9)) ► Truth table depicts semantics of the operation ► similar to a multiplication/addition table
37
! (NOT) ► Unary operation ► Returns a boolean result ► true when the operand is false ► false when the operand is true ► Example ► alternative to != ► (a != 5) same as (!(a == 5))
38
&& (AND) ► Returns a boolean result ► true whenever both operands are true ► false otherwise ► Example: ► testing whether a number is between 0 and 9 ► if ((num >= 0) && (num <= 9))... // inclusive ► Truth Table? ABA && B False TrueFalse TrueFalse True
39
|| (OR) ► Returns a boolean result ► true when at least one operand is true ► false otherwise ► Example ► if ((num % 2 == 0) || (num % 3 == 0)) … ► condition will evaluate to true if the number is a even or if it is a multiple of 3 ► Truth Table? ABA || B False True FalseTrue
40
Short-Circuit Evaluation ► Sometimes, we know the result of a boolean expression without checking all the conditions ► AND ( && ): If first condition is false, then result is false regardless of second condition ( x < y ) && ( a < b ) ► OR (||): If first condition is true, then result is true regardless of second condition ( x < y ) || ( a < b ) ► Short-circuit evaluation can prevent errors ( x 20 ) ( x != 0 ) && ( y/x > 20 )
41
Practice Programming Problem ► Write a program that reads three different numbers and tells if they are in INCREASING order, DECREASING order, or UNSORTED. ► Sample Input 1 3 9 ► Sample Output INCREASING
42
boolean Variables ► Boolean variables are convenient for long conditions ► Example boolean withinRange; … withinRange = ( num >= 0 ) && ( num <= 9 ); if ( withinRange )...
43
Methods with boolean Return Values ► Methods can return boolean-type values ► Allows you to encapsulate complex conditions, or conditions that depend on the state of an object
44
Example 7 public class BankAccount {... public static final int MINBAL = 10000;... public boolean isBelowMinBalance() { if ( balance < MINBAL ) return true; else return false; }... } It is common and recommended practice to give boolean-type methods names starting with isXXX Is there a shorter way to write this?
45
Example 7, revised public class BankAccount {... public static final int MINBAL = 10000;... public boolean isBelowMinBalance() { return (balance < MINBAL); }... }
46
Calling a boolean-type Method public class BankSystem { public static void main( String args[] ) { BankAccount b = new BankAccount();... boolean below = b.isBelowMinBalance(); if ( below ) System.out.println( "account is below balance" ); else System.out.println( "account is OK" );... }
47
Calling a boolean -type Method within the Same Class public class BankAccount {... public void withdraw( double amount ) { if ( amount <= balance ) { balance = balance - amount; if ( isBelowMinBalance() ) balance = balance – 50; // subtract penalty } else System.out.println( "Insufficient Balance" ); }... }
48
Advanced Topics ► Dangling Else ► The ? operator ► The switch statement
49
Dangling else if ( num > 10 ) if ( num > 100 ) System.out.println( "Large" ); else System.out.println( "Small" ); ► What gets printed out when num = 150? when num = 80? when num = 5? ► Which if does the else clause match?
50
Dangling else ► Rule in Java: an else clause matches the nearest enclosing if ► Use { } to match the outer if if ( num > 10 ) { if ( num > 100 ) System.out.println( "Large" ); } else System.out.println( "Small" );
51
The ? operator ► Syntax: condition ? then-value : else-value ► Use this as a one-line replacement for if ► Instead of String s; if ( x % 2 == 0 ) s = "even"; else s = "odd"; ► We can say String s = (x%2 == 0) ? "even" : "odd"; ► Commonly used in C programs ► Use sparingly, since it can lead to cryptic code
52
The if-else Chain Revisited ► If the conditions in an if-else chain are exact comparisons (using ==) on integral (or char) values, consider using a switch statement ► Example: print "One" if the value is 1, print "Two" if the value if 2, …
53
Example 8 if (num == 1) { System.out.println("One"); } else if (num == 2) { System.out.println("Two"); } else if (num == 3) { System.out.println("Three"); } else { System.out.println("Other number"); }
54
Example 8, revised; Using a Switch switch(num) { case 1: System.out.println("One"); break; case 2: System.out.println("Two"); break; case 3: System.out.println("Three"); break; default: System.out.println("Other number"); }
55
The switch Statement ► Use a switch statement whenever ► the conditions in an if-else chain are designed to check for constant values representing a finite number of cases ► Switch-case statement ► switch( exp ) ► exp must be a "countable" primitive type (i.e., byte, int, char, etc., but not float or double) ► NEW TO JAVA 7: or a String (not allowed in older versions of Java) ► case literal ► serves as "entry-point" label for case when exp==literal ► break; ► statement that causes control to exit the block ► if there's no break, control "falls-through" until we see a break
56
Using (or not using) break switch( letter ) { case 'a': case 'e': case 'i': case 'o': case 'u': System.out.println("Vowel"); break; default: System.out.println("Consonant"); }
57
Summary ► A program will sometimes need to branch. ► Branches often rely on testing if the input satisfies some condition. ► Branches are specified with conditionals. ► Conditions are specified with boolean expressions. ► There are several kinds of conditionals in Java. Learn to choose the most appropriate for the problem at hand.
58
Next Time… ► Loops, or finite algorithms for infinite processes.
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.