Conditions - PowerPoint PPT Presentation

1 / 62
About This Presentation
Title:

Conditions

Description:

Boolean ... A boolean expression evaluates to either true or false. The ' ... Useful for simplifying expressions. !(b1 && b2) !b1 || !b2 !(b1 || b2) ... – PowerPoint PPT presentation

Number of Views:23
Avg rating:3.0/5.0
Slides: 63
Provided by: hyperspace
Category:

less

Transcript and Presenter's Notes

Title: Conditions


1
Chapter 6
  • Conditions

2
This chapter discusses
  • Conditions and conditional statements.
  • Preconditions, postconditions, and class
    invariants.
  • Boolean expressions.

3
Conditions
  • postcondition a condition the implementor
    (server) guarantees will hold when a method
    completes execution.
  • invariant a condition that always holds true.
  • class invariant an invariant regarding
    properties of class instances that is, a
    condition that will always be true for all
    instances of a class.

4
Counter class
  • class invariant component variable tally will
    always be greater than or equal to zero.
  • This holds true with the methods currently
    defined.
  • postcondition the method count must make sure
    that tally is greater or equal to zero when the
    method completes execution.

5
Counter class (cont.)
  • Adding a method decrementCount threatens the
    class invariant constraint that tally be greater
    than or equal to zero.
  • public void decrementCount ()
  • tally tally - 1
  • We must guard the assignment statement with a
    condition statement.

6
Specifications
  • Postconditions and class invariants are part of
    class specification but not the implementation.
    Therefore they should be included in comments but
    not in the implementation.
  • /
  • Current countthe number of items
  • counted.
  • ensure
  • count gt 0
  • /
  • public int count ()

7
Specifications (cont.)
  • private int tally //current count
  • //invariant
  • // tally gt 0

8
if-then statement
  • Syntax if (condition) statement
  • A composite statement.

9
Counter class
  • /
  • Decrement positive count by 1
  • /
  • public void decrementCount ()
  • if (tally gt 0)
  • tally tally - 1

10
Explorer Class
  • /
  • Damage (hit points) required to defeat
  • this Explorer.
  • ensure
  • stamina gt 0
  • /
  • public int stamina ()
  • return staminaPoints
  • private int staminaPoints//current stamina
  • //invariant //staminaPoints gt 0

11
Explorer Class
  • If stamina reaches 0, an explorer is defeated.
  • One possible solution
  • public void takeHit (int hitStrength)
  • if (hitStrength lt staminaPoints)
  • staminaPoints staminaPoints -
    hitStrength
  • But this rarely lets the staminaPoints reach
    zero.

12
Another possible approach
  • public void takeHit (int hitStrength)
  • if (hitStrength lt staminPoint)
  • staminaPoints staminaPoints -
    hitStrength
  • if (hitstrength gt staminaPoints)
  • staminaPoints 0
  • What is wrong with this approach?

13
Another possible approach (cont.)
  • It may meet the first condition and then in its
    changed state, meet the second condition as well.

14
If-then-else statement
  • Syntax if (condition) statement1
    else statement2

15
Explorer class
  • public Explorer( , int stamina, )
  • if (stamina gt0)
  • staminaPoints stamina
  • else
  • staminaPoints 0
  • public void takeHit (int hitStrength)
  • if (hitStrength lt staminaPoints)
  • staminaPoints staminaPoints -
    hitStrength
  • else
  • staminaPoints 0

16
Explorer constructor
  • What should we do if the constructor is called
    with a negative value for the parameter stamina?
  • public Explorer (String name, rooms.Room
    location, int hitStrength,
  • int stamina)
  • if (stamina gt 0)
  • staminaPoints stamina
  • else
  • staminaPoints 0

17
Compound statements
  • Syntax statement1 statement2
  • In this statement,
  • if (hitStrength lt staminaPoints)
  • staminaPoints staminaPoints - hitStrength
  • else
  • staminaPoints 0
  • strengthPoints 0
  • The last statement is not part of the else
    condition.

18
Compound statements (cont.)
19
Compound statements (cont.)
  • Braces are used to create a block or compound
    statement, which is a single composite statement.
  • if (condition) if (condition)
  • statement1 statement1
  • statementn statementn
  • else
  • statement1
  • statementn

20
Compound statements (cont.)
  • if (hitStrength lt staminaPoints)
  • staminaPoints staminaPoints - hitStrength
  • else
  • staminaPoints 0
  • strengthPoints 0

21
Relational expressions
  • Relational operators
  • lt less than
  • lt less than or equal
  • gt greater than
  • gt greater than or equal
  • equal (A single denotes assignment.)
  • ! not equal
  • A relational expression consists of two
    expressions joined with a relational operator.

22
Relational expressions (cont.)
  • Let i110, i2-20, i330.
  • i1 lt 12 -gt true
  • i1 lt 10 -gt true
  • i3 i1 -gt false
  • i1 ! 2 -gt true
  • i1 lt 10 -gt false
  • i2 gt 0 -gt false
  • 2i1 i240 -gt true
  • i2(-1) ! i1i1 -gt false

23
Relational expressions (cont.)
  • An expression like altbltc is illegal.
  • If one operand is an int and the other is a
    double, the int is first converted to a double.
    10 gt 2.5 ? 10.0 gt 2.5
  • Since floating point values are approximations
    for real numbers, we should avoid using equality
    or inequality operators with them.
  • (1.0/6.01.0/6.01.0/6.0
  • 1.0/6.01.0/6.01.0/6.0) 1.0 ? false

24
Boolean variables
  • Booleans can be stored as variables.
  • private boolean tooBig
  • tooBig true
  • tooBig i1 gt 10

25
Boolean operators
  • ! not
  • and
  • or
  • ! booleanExpression
  • booleanExpression booleanExpression
  • booleanExpression booleanExpression
  • A boolean expression evaluates to either true or
    false.

26
The not operator
  • Not reverses boolean values. i.e. !true ?
    false !false ? true
  • i110
  • !( i1 gt 9) ? !(true) ? false
  • Not has high precedence.
  • ! i1 gt 9 ? (!i1) gt 9 ? illegal
  • Generally avoid the not operator.

27
And and or
  • (i1gt10)(i110)?falsetrue?true
  • (i1gt10)(i1lt0)?falsefalse?false
  • (i1gt0)(i1lt5)?truefalse?false
  • (i1gt0)(i1lt20)?truetrue?true

28
And and or (cont.)
  • The and have lower precedence than the
    relational operators, but parentheses are still
    useful because they enhance readability.
  • The and are lazy operators that evaluate
    only the left operand only when that suffices.

29
And and or (cont.)
  • Consider
  • (5 4) ????
  • (5 ! 4) ????
  • Does it matter what the second operands are?
  • This can protect against runtime errors such as
    an attempt to divide by zero.
  • Example (x 0) (y/x lt 10)
  • (x ! 0) (y/x lt 10)

30
DeMorgans laws
  • Useful for simplifying expressions.
  • !(b1 b2) ? !b1 !b2
  • !(b1 b2) ? !b1 !b2
  • !(i1gt5 i1lt8) ? !(i1gt5) !(i1lt8)

31
Operation precedence
32
Handling multiple cases
  • Consider a method that determines if a year is a
    leap year.
  • The Gregorian calendar stipulates that a year is
    a leap year if it is divisible by 4, unless it is
    also divisible by 100, in which case it is a leap
    year if and only if it is divisible by 400. For
    example, 1900 is not a leap year, but 2000 is.
  • (year 100 ! 0 year 4 0)
  • (year 100 0 year 400 0)

33
LeapYear method
  • Another way of representing these rules uses
    cases and nested conditional statements.
  • public boolean isLeapYear (int year)
  • boolean aLeapYear
  • if (year 4 0)
  • if (year 100 0)
  • aLeapYear (year 400 0)
  • else
  • aLeapYear true
  • else
  • aLeapYear false
  • return aLeapYear

34
LeapYear method (cont.)
35
TrafficSignal class
  • The traffic signal class cycles through 4 states
  • LEFT (left turn arrow)
  • GO (green light)
  • CAUTION (yellow light)
  • STOP (red light)
  • The component variable currentState will hold one
    of these states.

36
TrafficSignal class (cont.)
  • advance moves currentState to the next state.
  • public void advance ()
  • private int currentState
  • if (currentState LEFT)
  • currentState GO
  • else if (currentState GO)
  • currentState CAUTION
  • else if (currentState CAUTION)
  • currentState STOP
  • else //currentState STOP
  • currentState LEFT

37
TrafficSignal class (cont.)
38
Dangling else
  • Which if statement is this else statement
    associated with?
  • if (condition1)
  • if (condition2)
  • statement1
  • else
  • statement2

39
Dangling else (cont.)
  • It is associated with the second if (B).
  • To associate it with the first, add braces around
    everything contained between the first if and the
    else.
  • if (condition1)
  • if (condition2)
  • statement1
  • else
  • statement2

40
Example combination lock
  • Responsibilities
  • Know
  • The combination
  • whether unlocked or locked
  • Do
  • lock
  • unlock

41
CombinationLock class
  • Class CombinationLock
  • Queries
  • is open
  • Commands
  • lock
  • unlock

42
Class CombinationLock specifications
  • public class CombinationLock
  • Contructor
  • public CombinationLock (int combination)
  • Queries
  • public boolean isOpen()
  • Commands
  • public void close ()
  • public void open(int combination)

43
Class CombinationLock implementation
  • Component variables
  • private int combination
  • private boolean isOpen

44
Class CombinationLock implementation (cont.)
  • The straightforward implementations
  • public boolean isOpen ()
  • return isOpen
  • public void close ()
  • isOpen false

45
Class CombinationLock implementation (cont.)
  • When the constructor is being executed, there are
    two distinct variables with the same name.
    (Component variable and local variable
    combination).
  • The keyword this refers to the current object.
    Therefore this.combination refers to the
    component variable.
  • If the variable does not include the object
    reference this in front of it, it is a reference
    to the local variable.

46
Class CombinationLock implementation (cont.)
47
Class CombinationLock implementation (cont.)
  • public CombinationLock (int combination)
  • this.combination combination
  • isOpen false
  • We could write the second assignment as
  • this.isOpen false
  • But there is no ambiguity, so it is not needed.

48
Class CombinationLock implementation (cont.)
  • A final method
  • public void open (int combination)
  • if (this.combination combination)
  • isOpen true

49
Digit by digit lock
  • This lock has a 3 digit combination.
  • To open the lock, the client provides the digits
    one at a time.
  • If the client enters the three digits of the
    combination in order, the lock opens.
  • It doesnt matter how many digits the client
    provides, as long as the combination is given.

50
Digit by digit lock (cont.)
  • Digit Entered
  • 4
  • 1
  • 2
  • 4
  • 3
  • 1
  • 2
  • 3
  • Digit Entered
  • 1
  • 2
  • 3
  • 4
  • 7

Lock Status closed closed closed closed closed clo
sed closed open Lock Status closed closed open op
en open
51
Class CombinationLock
  • public class CombinationLock
  • Constructor
  • public CombinationLock (int combination)
  • require combination gt 0
    combination lt999
  • Queries
  • public boolean isOpen ()
  • Commands
  • public void close ()
  • public void enter (int digit)
  • require digit gt0 digit lt9

52
Precondition
  • A condition the client of a method must make sure
    holds when the method is invoked.
  • The constructor and method enter have certain
    requirements that must be met for them to execute
    properly. These are the requires found it the
    definition on the previous slide.
  • Somewhat like the unleaded gas only sign near
    the gas cap on an automobile.

53
CombinationLock responsibilities
  • Know
  • the 3-digit combination.
  • whether locked or unlocked.
  • the last three digits entered.
  • Do
  • lock.
  • unlock, when given the proper combination.
  • accept a digit.

54
Getting digits from integers.
  • Using the and / operator, we can extract each
    digit.
  • Suppose a combination 123.
  • 123 10 -gt 3
  • 123 / 10 -gt 12
  • 12 10 -gt 2
  • 12 / 10 -gt 1
  • 10 gets the last digit and / 10 get the
    remaining digits.

55
CombinationLock implementation
  • // entered1, entered2, entered3 are the last
    three
  • // digits entered, with entered3 the most recent.
  • // a value of -1 indicates the digit has not been
  • // entered.
  • private int entered1
  • private int entered2
  • private int entered3
  • // invariant
  • // entered1 gt -1 entered1 lt 9
  • // entered2 gt -1 entered2 lt 9
  • // entered3 gt -1 entered3 lt 9

56
(No Transcript)
57
(No Transcript)
58
(No Transcript)
59
(No Transcript)
60
Weve covered
  • Boolean expressions.
  • Conditional statements.
  • if (condition)
  • statement
  • if (condition)
  • statement1
  • else
  • statement2
  • Compound statements statement1 statement2
    statementn.
  • Preconditions, postconditions, invariants.

61
Glossary
62
Glossary (cont.)
Write a Comment
User Comments (0)
About PowerShow.com