Alice in Action with Java - Lincoln Park High School

advertisement
Alice in Action with Java
Chapter 4
Flow Control
Objectives
• Use the Boolean type and its basic operations
• Use the if statement to perform some statements
while skipping others
• Use the for and while statements to perform
(other) statements more than once
• Use Boolean variables and functions to control if
and while statements
• Use the wait()message to temporarily suspend
program execution
Alice in Action with Java
2
Flow Control
• Flow: sequence of steps for performing a user story
• Flow control statement: structure for managing flow
• Flow control statements used in previous chapters
– doInOrder: produces a sequential execution
– doTogether: produces a parallel execution
• Control statements introduced in the current chapter
– if: directs program flow along one of two paths
– for: directs flow into a fixed number of loops
– while: directs flow into an arbitrary number of loops
Alice in Action with Java
3
Flow Control (continued)
Alice in Action with Java
4
The Boolean Type
• A basic Alice type used to define Boolean variables
• A Boolean variable holds a value of true or false
• Other basic types: Number and Object
• Condition (Boolean expression)
– Produces a value of true or false
– Basis for decision-making in programs
Alice in Action with Java
5
Boolean Functions
• Return a value of true or false
• Can act as a condition in an if or while statement
• Many refer to an object’s bounding box
• Example: obj.isBehind(obj2)
– true, if obj’s position is beyond obj2’s rear edge
– false, otherwise
Alice in Action with Java
6
Boolean Variables
• Used to store a value of true or false
• Can be used in condition for if or while statement
• How to create a Boolean variable
– Click create new variable (or parameter) button
– Specify Boolean as variable (or parameter) type
Alice in Action with Java
7
Relational Operators
•
•
•
•
•
Produce true or false values
Six relational operators: ==, !=, <, <=, >, >=
Located in functions pane of world’s details area
Most often used to compare Number values
Example: hoursWorked > 40
– hoursWorked is a Number variable
– true when more than 40 hours have been worked
Alice in Action with Java
8
Relational Operators (continued)
Alice in Action with Java
9
Boolean Operators
•
•
•
•
Used to modify or combine relational operations
Three Boolean operators: AND, OR, NOT
Located in functions pane of world’s details area
Example: age > 12 && age < 20
– age is a Number variable
– Teen number compared to condition returns true
Alice in Action with Java
10
Boolean Operators (continued)
Alice in Action with Java
11
Introducing Selective Flow Control
• Summary of a scene with a princess and a dragon
– Princess meets a mute dragon and asks questions
– Dragon shakes its head to respond yes or no
• Objective: write a shakeHead()method
• Requirements for shakeHead()
– Parameter: yesOrNo, a String
– If yesOrNo == “yes”, dragon shakes head up and down
– If yesOrNo == “no”, dragon shakes head sideways
• Use an if statement to produce conditional behavior
– The if control structure is at bottom of editing area
Alice in Action with Java
12
Introducing Selective Flow Control
(continued)
Alice in Action with Java
13
if Statement Mechanics
• Value of a condition determines direction of flow
• Structure of an if statement:
– if (Condition ) {
Statements1
} else {
Statements2
}
• if statement behavior is also called selective flow
– If Condition is true, Statements1 are selected
– If Condition is false, Statements2 are selected
Alice in Action with Java
14
if Statement Mechanics (continued)
Alice in Action with Java
15
Building if Statement Conditions
• Coding the condition of the if statement
– Click on the yesOrNo parameter
– Drag parameter into the editing area
– Drop the parameter onto the condition’s placeholder
– Choose other and then type “yes”
• Overview for coding the remainder of shakeHead()
– Add headMovement variable for amount of turn
– Add turn()statements for up and down motion
– Add turn()statements for sideways motion
Alice in Action with Java
16
Building if Statement Conditions
(continued)
Alice in Action with Java
17
Building if Statement Conditions
(continued)
• Building a scene method that uses shakeHead()
– princess greets dragon using a say()message
– princess asks four questions
– shakeHead()is called in response to each question
• Click the Play button to test the program
Alice in Action with Java
18
Building if Statement Conditions
(continued)
Alice in Action with Java
19
Building if Statement Conditions
(continued)
Alice in Action with Java
20
The wait()Statement
• Pauses a program for specified number of seconds
• Form of wait()statement: wait(numSecs);
• Use of wait()scene with dragon and princess
– Inserted between princess’s first and second lines
Alice in Action with Java
21
Validating Parameter Values
• if statement can be used to guard set of statements
– Flow enters only if parameter values are valid
• Example: check distance value passed to jump()
– Check for positive value with condition distance > 0
– Check jump length with distance < MAX_DISTANCE
– Combine two conditions with the AND (&&) operator
• distance > 0 && distance <= MAX_DISTANCE
• How to incorporate validating logic using if structures
– Place original jump()logic onto true path (outer if)
– Place validating logic in the false path (nested if)
Alice in Action with Java
22
Validating Parameter Values
(continued)
Alice in Action with Java
23
Validating Parameter Values
(continued)
Alice in Action with Java
24
Validating Parameter Values
(continued)
Alice in Action with Java
25
Introducing Repetition
• Refer to flapWings()method from Figure 2-16
• Enhancement: use for loop to flap wings numTimes
• Overview for implementing the enhancement
–
–
–
–
–
Open the flapWings()method
Adjust the duration values for the wing movements
Drag loop control to the top of the method and drop
Select numTimes for number of iterations
Drag the doInOrder statement into the for statement
Alice in Action with Java
26
Introducing Repetition (continued)
Alice in Action with Java
27
Introducing Repetition (continued)
Alice in Action with Java
28
Mechanics of the for Statement
• Repeat statement execution a fixed number of times
• Example: pass 3 to flapWings()for 3 flaps
• Structure of the simple for statement
– for(int index = 0;index < limit;index++){
Statements
}
• The for statement is also known as a counting loop
– First statement in ( ) initializes the index
– Second statement in ( ) checks index against limit
– Third statement in ( ) increments the index
Alice in Action with Java
29
Mechanics of the for Statement
(continued)
Alice in Action with Java
30
Mechanics of the for Statement
(continued)
• To test a for loop, trace the behavior with values
– Statements are executed while index < numTimes
– Example: send flapWings(3)to the dragon object
• Simple version of for lets you modify limit value
• Purpose of show complicated version button
– Change initial value of index and/or update to index
– Example: change update to index+=2
• Note: neither version of for allows you to count down
Alice in Action with Java
31
Mechanics of the for Statement
(continued)
Alice in Action with Java
32
Mechanics of the for Statement
(continued)
Alice in Action with Java
33
Nested Loops
• Three shots enhancing Scene 1 of dragon animation
– Dragon flies toward a castle in the countryside
– As dragon nears castle, it circles the tower three times
– Dragon then descends and lands on the drawbridge
• One way to build the first shot
– Go to go into the Add Objects window
–
–
–
–
Position the dragon above the castle’s drawbridge
Move dragon up until it is even with the castle’s tower
Drop a dummy and then drag the dragon off-screen
Use setPointOfView()to properly position dragon
Alice in Action with Java
34
Nested Loops (continued)
• One way to build the second shot
– Use for statement to control other flying statements
• Understanding the mechanics of Shot 2
–
–
–
–
Outer for controls inner (nested) for in flapWings()
AsSeenBy()attribute revolves dragon around castle
Increase duration of turn()to synchronize moves
Set style to smooth the animation
• The third shot is discussed in Section 4.4
Alice in Action with Java
35
Nested Loops (continued)
Alice in Action with Java
36
The while Statement
• limit value in for loop must be set to a fixed value
• Circumstance when the for loop is appropriate
– Statements are to be executed a fixed number of times
• Problem: looping when the limit value is unknown
• Solution: use a while statement
Alice in Action with Java
37
Introducing the while Statement
• Strategy for building third shot of dragon animation
– Repeatedly have dragon flap its wings
– Move dragon downward while it is above drawbridge
• Overview for building the third shot
–
–
–
–
–
–
Place doTogether statement in doInOrder statement
Use setPointOfView()to move camera closer
Send flappingWings()message to the dragon
Drag the while statement to the editing area
Drop the while statement below doInOrder
Insert placeholder value into the while condition
Alice in Action with Java
38
Introducing the while Statement
(continued)
Alice in Action with Java
39
Introducing the while Statement
(continued)
• Building the third shot (continued)
– Drag dragon’s isAbove()over condition and drop
– Add castle.bridge argument to isAbove()
– Insert doTogether statement in the while loop
– Add move() method to cause dragon to descend
– Send another flapWings()message to dragon
– Use setPointOfView()to zoom in for a close-up
• Infinite loop occurs if loop lacks falsifying condition
– In third shot, move()eventually terminates loop
Alice in Action with Java
40
Introducing the while Statement
(continued)
Alice in Action with Java
41
Introducing the while Statement
(continued)
Alice in Action with Java
42
while Statement Mechanics
• Provides for both definite and indefinite looping
• Structure of a while loop
– while ( Condition ) {
Statements
}
• The while loop is more general than the for loop
– Flow enters while structure if Condition is true
– One statement must eventually falsify Condition
Alice in Action with Java
43
while Statement Mechanics
(continued)
Alice in Action with Java
44
Comparing the for and while
Statements
• while statement can produce any type of repetition
• for statement is used for fixed number of repetitions
• Loop selection question to ask: “Am I counting?”
– If yes, use a for statement; otherwise, use while
• Both loops test conditions before flow enters structure
• Both loops are bypassed if initial condition is false
Alice in Action with Java
45
A Second Example
• Setting up the scene
– Use shebuilder to create a soccer player (Jane)
– Place soccerBall object in Jane’s hands
• Writing a dropBounce()method for soccerBall
–
–
–
–
Move the ball down distanceToGround meters
Change distanceToGround by bounce factor (2/3)
Move ball up reduced distanceToGround meters
Bouncing continues while distanceToGround > 0
• Writing a janeDropsBall()method
– Send roll()messages to forearms
– Send dropAndBounce()message to soccerBall
Alice in Action with Java
46
A Second Example (continued)
Alice in Action with Java
47
A Second Example (continued)
Alice in Action with Java
48
A Second Example (continued)
Alice in Action with Java
49
Flow-Control Functions
• Functions can be defined to answer questions
• Complex questions are asked by flow-control functions
Alice in Action with Java
50
Spirals and the Fibonacci Function
• User story
– Scene 1: girl finds an old book and reads contents
– Scene 2: girl uses the map to locate a palm tree
– Scene 3: girl follows spiral from tree to treasure site
• Coding spiral motion in Scene 3 is greatest challenge
• Many natural spirals are based on Fibonacci numbers
• Fibonacci numbers (sequence)
– Number > 1 is found by adding two preceding numbers
– Example: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ...
– Spiral inscribed in rectangles built from the sequence
Alice in Action with Java
51
Spirals and the Fibonacci Function
(continued)
Alice in Action with Java
52
Spirals and the Fibonacci Function
(continued)
• Approximating Fibonacci spiral in playScene3()
– Have girl move 6 times
– Distance of each move equals next Fibonacci number
– While moving forward, girl also turns left 1/4 revolution
• playScene3()requires a fibonacci()function
– To be designed and implemented in the next section
• Save girl as fibonacciGirl for possible reuse
Alice in Action with Java
53
Spirals and the Fibonacci Function
(continued)
Alice in Action with Java
54
The Fibonacci Function
• Defining the outline of fibonacci()function
– Select girl and create a function named fibonacci
– Create a Number parameter named n
• Formula: if n > 1, f(n) = sum of two preceding numbers
• Designing an algorithm to generate the nth number
– Create local variables: result, nextToLast, last
– Add if statement to the function
– If n == 1 or n == 2, result = 1
– Otherwise calculate nth value using formula in for loop
• fibonacci()calls in playScene3() specify spiral
Alice in Action with Java
55
The Fibonacci Function (continued)
Alice in Action with Java
56
Summary
• Flow control statement: controls the flow of statement
execution
• Condition: Boolean expression producing a true or
false value
• Boolean function: returns true or false value
• Boolean variable: holds value of true or false
• Relational operators: ==, !=, <, <=, >, >=
Alice in Action with Java
57
Summary (continued)
• Boolean operators: AND, OR, NOT
• if statement: directs flow along one of two paths
based on evaluation of a condition
• for statement: repeats execution of a group of
statements a fixed number of times
• while statement: repeats execution of a group of
statements an arbitrary number of times
• wait()statement: a statement that pauses program
flow for a specified number of seconds
Alice in Action with Java
58
Download