alice in action with java chapter 4 flow control

61
Alice in Action with Java Chapter 4 Flow Control

Upload: jayson-earl-floyd

Post on 22-Dec-2015

238 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Alice in Action with Java Chapter 4 Flow Control

Alice in Action with Java

Chapter 4Flow Control

Page 2: Alice in Action with Java Chapter 4 Flow Control

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

Page 3: Alice in Action with Java Chapter 4 Flow Control

Alice in Action with Java 3

Flow Control• 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

Page 4: Alice in Action with Java Chapter 4 Flow Control

Alice in Action with Java 4

Objectives

• Use the Boolean type and its basic operations

• Use Boolean variables, expressions and functions to control if and while statements

• Use the if statement to perform some statements while skipping others

• Use the for and while statements to perform (other) statements more than once

Page 5: Alice in Action with Java Chapter 4 Flow Control

Alice in Action with Java 5

Boolean Variables

• Boolean values: true, false

• Boolean Variables: are of the Boolean type– 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

Page 6: Alice in Action with Java Chapter 4 Flow Control

Alice in Action with Java 6

Boolean Functions

• Return a value of true or false• Can act as a condition in an if or while statement

• Alice: many predefined Boolean functions refer to an object’s bounding box – Example: obj.isBehind(obj2)

• true, if obj’s position is beyond obj2’s rear face• false, otherwise

Page 7: Alice in Action with Java Chapter 4 Flow Control

Alice in Action with Java 7

Boolean Expressions

• Boolean expression– Producing a value of true or false, which can be

• Stored in a boolean variable• Returned from a boolean function• Used in if or while statement, as the description of a condition, and the basis for decision making

– E.g. if (temperature > 95) && (notRain == true)goToSwim()

Page 8: Alice in Action with Java Chapter 4 Flow Control

Alice in Action with Java 8

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

Page 9: Alice in Action with Java Chapter 4 Flow Control

Alice in Action with Java 9

Relational Operators (continued)

Page 10: Alice in Action with Java Chapter 4 Flow Control

Alice in Action with Java 10

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

Page 11: Alice in Action with Java Chapter 4 Flow Control

Alice in Action with Java 11

Boolean Operators (continued)

Page 12: Alice in Action with Java Chapter 4 Flow Control

Alice in Action with Java 12

Boolean Operators (continued)

var1 var2 var1 && var2 var1 || var2 !var1

true true true true false

true false false true false

false true false true true

false false false false true

Page 13: Alice in Action with Java Chapter 4 Flow Control

Alice in Action with Java 13

Introducing Selective Flow Control

• Example: 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– 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

Page 14: Alice in Action with Java Chapter 4 Flow Control

Alice in Action with Java 14

if Statement

• Structure of an if statement:– if (Condition ) { Statements1 } else {

Statements2 }

• Value of a condition determines direction of flow – If Condition is true, Statements1 are selected

– If Condition is false, Statements2 are selected

Page 15: Alice in Action with Java Chapter 4 Flow Control

Alice in Action with Java 15

if Statement Mechanics (continued)

if statement behavior is also called selective flow

Page 16: Alice in Action with Java Chapter 4 Flow Control

Alice in Action with Java 16

Building if Statement Conditions

• The if control structure is at bottom of edit area• After dragging it to the edit area, you get

Page 17: Alice in Action with Java Chapter 4 Flow Control

Alice in Action with Java 17

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”

Page 18: Alice in Action with Java Chapter 4 Flow Control

Alice in Action with Java 18

Building if Statement Conditions

• 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

Page 19: Alice in Action with Java Chapter 4 Flow Control

Alice in Action with Java 19

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

Page 20: Alice in Action with Java Chapter 4 Flow Control

Alice in Action with Java 20

Building if Statement Conditions (continued)

Page 21: Alice in Action with Java Chapter 4 Flow Control

Alice in Action with Java 21

Building if Statement Conditions (continued)

Page 22: Alice in Action with Java Chapter 4 Flow Control

Alice in Action with Java 22

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

Page 23: Alice in Action with Java Chapter 4 Flow Control

Alice in Action with Java 23

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)

Page 24: Alice in Action with Java Chapter 4 Flow Control

Alice in Action with Java 24

Validating Parameter Values (continued)

Page 25: Alice in Action with Java Chapter 4 Flow Control

Alice in Action with Java 25

Validating Parameter Values (continued)

Page 26: Alice in Action with Java Chapter 4 Flow Control

Alice in Action with Java 26

Validating Parameter Values (continued)

Page 27: Alice in Action with Java Chapter 4 Flow Control

Alice in Action with Java 27

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

Page 28: Alice in Action with Java Chapter 4 Flow Control

Alice in Action with Java 28

Introducing Repetition (continued)

Page 29: Alice in Action with Java Chapter 4 Flow Control

Alice in Action with Java 29

Introducing Repetition (continued)

Page 30: Alice in Action with Java Chapter 4 Flow Control

Alice in Action with Java 30

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

Page 31: Alice in Action with Java Chapter 4 Flow Control

Alice in Action with Java 31

Mechanics of the for Statement (continued)

Page 32: Alice in Action with Java Chapter 4 Flow Control

Alice in Action with Java 32

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

Page 33: Alice in Action with Java Chapter 4 Flow Control

Alice in Action with Java 33

Mechanics of the for Statement (continued)

Page 34: Alice in Action with Java Chapter 4 Flow Control

Alice in Action with Java 34

Mechanics of the for Statement (continued)

Page 35: Alice in Action with Java Chapter 4 Flow Control

Alice in Action with Java 35

Mechanics of the for Statement (continued)

• Purpose of show complicated version button– Change initial value of index and/or update to index– Example: change update to index+=2

• Simple version of for lets you modify limit value

• Note: neither version of for allows you to count down

Page 36: Alice in Action with Java Chapter 4 Flow Control

Alice in Action with Java 36

Nested Loops• Example: 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 (section 4.4)

• 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

Page 37: Alice in Action with Java Chapter 4 Flow Control

Alice in Action with Java 37

Nested Loops (continued)• One way to build the second shot: circling the tower 3 times

– Outer for loop for circling the tower 3 times– inner for loop in flapWings() for flapping wings 4 times in each circle

– More Alice details• AsSeenBy()attribute revolves dragon around castle • Increase duration of turn()to synchronize moves• Set style suitable for animation

Page 38: Alice in Action with Java Chapter 4 Flow Control

Alice in Action with Java 38

The while Statement

• for loop property: limit 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– e.g. how many flaps for “Dragon then descends and

lands on the drawbridge”?

• Solution: use a while statement

Page 39: Alice in Action with Java Chapter 4 Flow Control

Alice in Action with Java 39

while Statement Mechanics• 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 . Otherwise,

you get an infinite loop that will never ends

Page 40: Alice in Action with Java Chapter 4 Flow Control

Alice in Action with Java 41

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

Page 41: Alice in Action with Java Chapter 4 Flow Control

Alice in Action with Java 42

Introducing the while Statement (continued)

Page 42: Alice in Action with Java Chapter 4 Flow Control

Alice in Action with Java 43

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

Page 43: Alice in Action with Java Chapter 4 Flow Control

Alice in Action with Java 44

Introducing the while Statement (continued)

Page 44: Alice in Action with Java Chapter 4 Flow Control

Alice in Action with Java 45

Introducing the while Statement (continued)

Page 45: Alice in Action with Java Chapter 4 Flow Control

Alice in Action with Java 46

Comparing the for and while Statements

• while statement is more general and can produce any type of repetition, including the for loop behavior

• 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• More examples:

– drop a ball: continue the bounce while rebound distanceToGround >0

– FabonaciGirl: use for to compute Fabonaci numbers and move corresponding steps

Page 46: Alice in Action with Java Chapter 4 Flow Control

Alice in Action with Java 47

A While-Loop 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

Page 47: Alice in Action with Java Chapter 4 Flow Control

Alice in Action with Java 48

A While-Loop Example (continued)

Page 48: Alice in Action with Java Chapter 4 Flow Control

Alice in Action with Java 49

A While-Loop Example (continued)

Page 49: Alice in Action with Java Chapter 4 Flow Control

Alice in Action with Java 50

A While-Loop Example (continued)

Page 50: Alice in Action with Java Chapter 4 Flow Control

Alice in Action with Java 52

Fibonacci Numbers

• The original problem investigated by Fibonacci in1202– about how fast rabbits could breed in ideal circumstances

– Suppose a newly-born pair of rabbits, one male, one female, are put in a field.

– Rabbits are able to mate at the age of one month so that at the end of its second month a female can produce another pair of rabbits.

– Suppose that our rabbits never die and that the female always produces one new pair (one male, one female) every month from the second month on.

– How many pairs will there be in one year?

Page 51: Alice in Action with Java Chapter 4 Flow Control

Alice in Action with Java 53

Fibonacci Numbers

• Analysis– At the end of the first month, they mate, but there is still

one only 1 pair.– At the end of the second month the female produces a

new pair, so now there are 2 pairs of rabbits in the field.– At the end of the third month, the original female

produces a second pair, making 3 pairs in all in the field.– At the end of the fourth month, the original female has

produced yet another new pair, the female born two months ago produces her first pair also, making 5 pairs.

– …

Page 52: Alice in Action with Java Chapter 4 Flow Control

Alice in Action with Java 54

Fibonacci Numbers in the Rabbit Growth Model

• Fibonacci numbers (sequence)– Number > 2 is found by adding two preceding numbers – Example: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ...

Page 53: Alice in Action with Java Chapter 4 Flow Control

Fabonaci Numbers in Nature

http://britton.disted.camosun.bc.ca/fibslide/jbfibslide.htm 55

Page 54: Alice in Action with Java Chapter 4 Flow Control

http://www.maths.surrey.ac.uk/hosted-sites/R.Knott/Fibonacci/fibnat.html 56

Spirals and the Fibonacci Numbers

Page 55: Alice in Action with Java Chapter 4 Flow Control

Alice in Action with Java 57

Fibonacci Number Example

• 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– Spiral inscribed in rectangles built from the sequence

Page 56: Alice in Action with Java Chapter 4 Flow Control

Alice in Action with Java 58

Spirals and the Fibonacci Function (continued)

• Approximating Fibonacci spiral in playScene3()– Have girl move 6 times– Distance of each move equals a corresponding

Fibonacci number– While moving forward, girl also turns left 1/4 revolution

• playScene3()requires a fibonacci()function, which will be defined as an object method for the girl

• Save girl as fibonacciGirl for possible reuse

Page 57: Alice in Action with Java Chapter 4 Flow Control

Alice in Action with Java 59

Spirals and the Fibonacci Function (continued)

Page 58: Alice in Action with Java Chapter 4 Flow Control

Alice in Action with Java 60

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

Page 59: Alice in Action with Java Chapter 4 Flow Control

Alice in Action with Java 61

The Fibonacci Function (continued)

Page 60: Alice in Action with Java Chapter 4 Flow Control

Alice in Action with Java 62

Summary

• Flow control statement: controls the flow of statement execution

• 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 appropriate number of times based on a loop continuation condition

Page 61: Alice in Action with Java Chapter 4 Flow Control

Alice in Action with Java 63

Summary (continued)

• Condition: a Boolean entity producing a true or false value

• Boolean variable: holds value of true or false• Boolean function: returns true or false value• Boolean expression: produces true or false value

– Relational operators: ==, !=, <, <=, >, >=– Boolean operators: &&, ||, !