Presentation is loading. Please wait.

Presentation is loading. Please wait.

Decisions: Handling Infinite Cases CS 21a: Introduction to Computing I First Semester, 2013-2014.

Similar presentations


Presentation on theme: "Decisions: Handling Infinite Cases CS 21a: Introduction to Computing I First Semester, 2013-2014."— Presentation transcript:

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.


Download ppt "Decisions: Handling Infinite Cases CS 21a: Introduction to Computing I First Semester, 2013-2014."

Similar presentations


Ads by Google