Presentation is loading. Please wait.

Presentation is loading. Please wait.

Decisions CS 21a: Introduction to Computing I Department of Information Systems and Computer Science Ateneo de Manila University (Chapter 5, Horstmann*

Similar presentations


Presentation on theme: "Decisions CS 21a: Introduction to Computing I Department of Information Systems and Computer Science Ateneo de Manila University (Chapter 5, Horstmann*"— Presentation transcript:

1 Decisions CS 21a: Introduction to Computing I Department of Information Systems and Computer Science Ateneo de Manila University (Chapter 5, Horstmann* text) *Some slides taken from Horstmann’s notes

2 Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved Decisions Slide 2 Conditional Execution Sometimes we want a statement executed only when a condition is met Java structures for conditions The if-statement boolean variables, operators, expressions, and methods The ? Operator The switch-statement

3 Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved Decisions Slide 3 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)

4 Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved Decisions Slide 4 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 }... }

5 Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved Decisions Slide 5 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; }... }

6 Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved Decisions Slide 6 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

7 Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved Decisions Slide 7 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; }... }

8 Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved Decisions Slide 8 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

9 Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved Decisions Slide 9 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

10 Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved Decisions Slide 10 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”); }

11 Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved Decisions Slide 11 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

12 Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved Decisions Slide 12 Brace layout if (amount <= balance) { double newBalance = balance – amount; balance = newBalance; } OR if (amount <= balance) { double newBalance = balance – amount; balance = newBalance; }

13 Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved Decisions Slide 13 Indentation and tabs public class BankAccount { private int balance;... public void withdraw( int amount ) { if ( amount <= balance )` balance = balance - amount; else balance = balance – OVERDRAFT_PENALTY; }... } Two to three spaces per indentation

14 Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved Decisions Slide 14 Indentation and tabs public class BankAccount { private int balance;... public void withdraw( int amount ) { if ( amount <= balance ) balance = balance - amount; else balance = balance – OVERDRAFT_PENALTY; }... } Eight spaces per indentation You can use the space bar or the tab key to indent your code

15 Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved Decisions Slide 15 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

16 Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved Decisions Slide 16 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

17 Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved Decisions Slide 17 Comparing floating-point numbers To avoid roundoff 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

18 Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved Decisions Slide 18 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"))

19 Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved Decisions Slide 19 Comparing strings (cont.) 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"

20 Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved Decisions Slide 20 Lexicographic comparison

21 Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved Decisions Slide 21 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()

22 Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved Decisions Slide 22 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 "" Testing for null

23 Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved Decisions Slide 23 Sequences of comparisons if (condition1) statement1; else if (condition2) statement2;... else statementn; -The statement that corresponds to the first matching condition is executed -Also called an if-else chain

24 Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved Decisions Slide 24 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” );

25 Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved Decisions Slide 25 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

26 Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved Decisions Slide 26 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;

27 Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved Decisions Slide 27 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%

28 Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved Decisions Slide 28 Example 6 public double TicketPrice( int customerAge, int daysShowing ) { double cost; if (customerAge >= 60) if ( daysShowing < 8 ) cost = 100.0 * 0.80; else cost = 120.0 * 0.80; else if ( daysShowing < 8 ) cost = 100.0; else cost = 120.0; return cost; }

29 Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved Decisions Slide 29 The boolean Data Type Only two possible values true and false Literals true, false lowercase (reserved words in Java) Operations relational operators logical operators

30 Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved Decisions Slide 30 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

31 Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved Decisions Slide 31 ! (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))

32 Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved Decisions Slide 32 && (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 && Bfalse falsetrue truefalsetrue false true

33 Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved Decisions Slide 33 || (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 || Bfalse falsetrue truefalsetrue false true

34 Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved Decisions Slide 34 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 )

35 Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved Decisions Slide 35 Boolean Variables Boolean variables are convenient for long conditions Example boolean withinRange; … withinRange = ( num >= 0 ) && ( num <= 9 ); if ( withinRange )...

36 Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved Decisions Slide 36 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

37 Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved Decisions Slide 37 Example 7 public class BankAccount {... public static final double 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?

38 Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved Decisions Slide 38 Example 7, revised public class BankAccount {... public static final double MINBAL = 10000;... public boolean isBelowMinBalance() { return (balance < MINBAL); }... }

39 Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved Decisions Slide 39 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” );... }

40 Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved Decisions Slide 40 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” ); }... }

41 Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved Decisions Slide 41 Advanced Topics Dangling Else The ? operator The switch statement

42 Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved Decisions Slide 42 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?

43 Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved Decisions Slide 43 Dangling Else, continued 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” );

44 Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved Decisions Slide 44 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

45 Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved Decisions Slide 45 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, …

46 Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved Decisions Slide 46 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”); }

47 Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved Decisions Slide 47 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”); }

48 Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved Decisions Slide 48 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) CANNOT be a String 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

49 Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved Decisions Slide 49 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”); }


Download ppt "Decisions CS 21a: Introduction to Computing I Department of Information Systems and Computer Science Ateneo de Manila University (Chapter 5, Horstmann*"

Similar presentations


Ads by Google