decisions cs 21a: introduction to computing i department of information systems and computer science...

49
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

Upload: dortha-cunningham

Post on 01-Jan-2016

213 views

Category:

Documents


0 download

TRANSCRIPT

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

DecisionsCS 21a: Introduction to Computing IDepartment of Information Systems

and Computer ScienceAteneo de Manila University

(Chapter 5, Horstmann* text)

*Some slides taken from Horstmann’s notes

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

Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved

DecisionsSlide 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

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

Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved

DecisionsSlide 3

The if-statement

Syntaxif (condition) statement

Notes parentheses are required around the

condition statement means any valid statement in

Java (including if-statements and blocks)

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

Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved

DecisionsSlide 4

Example 1public 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 } ...}

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

Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved

DecisionsSlide 5

Example 2public class BankAccount{ private double balance; ... public void withdraw( double amount ) { if ( amount <= balance ) balance = balance - amount; if ( amount > balance )

balance = balance – OVERDRAFT_PENALTY; } ...}

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

Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved

DecisionsSlide 6

The optional else clause

If-statement syntax revisitedif (condition) statementelse statement

Use whenever an alternative statement should be executed when the condition is not met

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

Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved

DecisionsSlide 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; } ...}

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

Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved

DecisionsSlide 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 appliedbut an error messageis printed when thecondition is not met

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

Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved

DecisionsSlide 9

Example 4

Suppose two statements need to be conditionally executed

Incorrect attemptif ( amount <= balance )

balance = balance - amount;

System.out.println(“amount deducted”);

Print statement will be executed unconditionally

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

Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved

DecisionsSlide 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”);

}

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

Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved

DecisionsSlide 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

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

Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved

DecisionsSlide 12

Brace layoutif (amount <= balance){double newBalance = balance – amount;balance = newBalance;

}OR

if (amount <= balance) {double newBalance = balance – amount;balance = newBalance;

}

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

Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved

DecisionsSlide 13

Indentation and tabspublic 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

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

Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved

DecisionsSlide 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

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

Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved

DecisionsSlide 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

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

Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved

DecisionsSlide 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 0but 4.440892098500626E-16

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

Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved

DecisionsSlide 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

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

Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved

DecisionsSlide 18

Comparing strings Don't use == for strings! if (input == "Y") // WRONG!!!

Use equals method: if (input.equals("Y"))

== tests identity, equals() tests forequal contents

Case insensitive test ("Y" or "y") if (input.equalsIgnoreCase("Y"))

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

Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved

DecisionsSlide 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"

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

Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved

DecisionsSlide 20

Lexicographic comparison

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

Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved

DecisionsSlide 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()

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

Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved

DecisionsSlide 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

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

Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved

DecisionsSlide 23

Sequences of comparisons

if (condition1) statement1; else if (condition2) statement2; . . . else statementn;

-The statementthat correspondsto the first matching conditionis executed-Also called anif-else chain

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

Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved

DecisionsSlide 24

Example 5if ( 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” );

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

Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved

DecisionsSlide 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

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

Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved

DecisionsSlide 26

Nested branches

Branch inside another branchif (condition0) if (condition1) statement1a; else statement1b; else statement2;

else portion couldalso contain anested branch; e.g., if (condition2) statement2a; else statement2b;

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

Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved

DecisionsSlide 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%

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

Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved

DecisionsSlide 28

Example 6public 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;

elseif ( daysShowing < 8 ) cost = 100.0;

else cost = 120.0;

return cost; }

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

Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved

DecisionsSlide 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

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

Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved

DecisionsSlide 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

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

Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved

DecisionsSlide 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))

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

Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved

DecisionsSlide 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?

A B A && Bfalse falsefalse truetrue falsetrue true

falsefalsefalsetrue

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

Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved

DecisionsSlide 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?

A B A || Bfalse falsefalse truetrue falsetrue true

falsetruetruetrue

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

Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved

DecisionsSlide 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 < 0 ) || ( Math.sqrt( x ) > 20 )( x != 0 ) && ( y/x > 20 )

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

Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved

DecisionsSlide 35

Boolean Variables

Boolean variables are convenient for long conditions

Exampleboolean withinRange;

withinRange = ( num >= 0 ) && ( num <= 9 );

if ( withinRange ) ...

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

Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved

DecisionsSlide 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

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

Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved

DecisionsSlide 37

Example 7public 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?

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

Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved

DecisionsSlide 38

Example 7, revised

public class BankAccount

{

...

public static final double MINBAL = 10000;

...

public boolean isBelowMinBalance()

{

return (balance < MINBAL);

}

...

}

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

Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved

DecisionsSlide 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” );

...

}

}

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

Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved

DecisionsSlide 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” );

} ...

}

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

Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved

DecisionsSlide 41

Advanced Topics

Dangling Else The ? operator The switch statement

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

Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved

DecisionsSlide 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?

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

Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved

DecisionsSlide 43

Dangling Else, continued

Rule in Java: an else clause matches the nearest enclosing if

Use { } to match the outer ifif ( num > 10 ) { if ( num > 100 ) System.out.println( “Large” );}else System.out.println( “Small” );

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

Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved

DecisionsSlide 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 sayString s = (x%2 == 0) ? “even” : “odd”;

Commonly used in C programs Use sparingly, since it can lead to cryptic code

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

Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved

DecisionsSlide 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, …

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

Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved

DecisionsSlide 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”);}

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

Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved

DecisionsSlide 47

Example 8, revised;using a switchswitch(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”);}

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

Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved

DecisionsSlide 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

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

Copyright 2008, by the authors of these slides, and Ateneo de Manila University. All rights reserved

DecisionsSlide 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”);}