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

Post on 01-Jan-2016

213 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

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

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)

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

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

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

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

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

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

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

}

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

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;

}

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

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

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

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

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

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

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"

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

DecisionsSlide 20

Lexicographic comparison

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

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

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

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

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

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;

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%

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

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

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

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

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

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

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 )

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

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

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?

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

}

...

}

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

...

}

}

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

} ...

}

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

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?

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

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

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

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

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

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

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

top related