Transcript An Example
Programming and Problem Solving
With Java
A Brief Overview of
Java Programming
The Turtle and Its World
Java Program Structure
Classes and Methods
Parameters
Reusing Classes
The if Statement
The for Statement
Drawing Shapes with the for
Statement
Software Documentation
Copyright 1999, James M. Slack
Turtle and Its World
Turtle graphics
Will write programs that
control an imaginary
turtle
Turtle carries an
imaginary pen
As turtle moves, it draws
a linewith its pen
Can control the direction
and distance the turtle
moves
Programming and Problem Solving with Java
2
Turtle and Its World
The turtle’s
drawing area
The turtle
Programming and Problem Solving with Java
3
Turtle and Its World
Turtle draws line only
when pen is down
Starts with pen down
To draw a dashed line:
Tell turtle to move
Tell turtle to pick up pen
Tell turtle to move
Tell turtle to put down pen
Tell turtle to move
Tell turtle to pick up pen
(etc.)
Programming and Problem Solving with Java
4
Turtle and Its World
Turtle can also turn
Turtle can move
anywhere in drawing
window
1200 turtle steps
up and down
1200 turtle steps
left and right
1200 turtle steps
Always turns relative
to current direction
1200 turtle steps
Programming and Problem Solving with Java
5
Turtle and Its World
To tell the turtle to draw something
Write turtle graphics instructions in a Java program
Compile the program
Run the program
First step: create a turtle object
Turtle myTurtle = new Turtle();
Creates a new Turtle object called myTurtle
Name can be almost anything instead of myTurtle -thisTurtle, aTurtle, xyz
In each program, turtle starts
At center of screen
Facing up
With its pen down
Programming and Problem Solving with Java
6
Turtle and Its World: Instructions
The move instruction
Moves the turtle in current direction
To move the turtle 300 t-steps
myTurtle.move(300);
Moves turtle, drawing a line if the pen is down
Doesn’t move turtle if too close to an edge
Read statement as
Ask the turtle named myTurtle to move 300 t-steps
Object-oriented programming perspective
Think of an object (myTurtle) as an intelligent entity
Object responds to requests for action
Object can decide not to act
Programming and Problem Solving with Java
7
Turtle and Its World: Instructions
The turnRight instruction
Turns the turtle the given degrees
right of current direction
Can turn any number of
degrees between 0 and 180
To turn turtle around
myTurtle.turnRight(180);
Turtle will refuse to turn
any amount outside the
range 0 to 180
Programming and Problem Solving with Java
8
Turtle and Its World: Instructions
The penUp instruction
Asks the turtle to pick up its pen
myTurtle.penUp();
Turtle will refuse if pen is already up
The penDown instruction
Asks the turtle to put its pen down
myTurtle.penDown();
Turtle will refuse if pen is
already down
Programming and Problem Solving with Java
9
Turtle and Its World
Example: Draw a square
Algorithm
Draw a line
Turn 90 degrees to the right
Draw another line, the same distance as the first one
Turn 90 degrees to the right
Draw a third line, the same distance as the first one
Turn 90 degrees to the right
Draw a fourth line, the same distance as the first one
Turn 90 degrees to the right
Make each side of length 500
(Turtle starts in middle, 600 t-steps away from edge)
Programming and Problem Solving with Java
10
Turtle and Its World
Convert algorithm to a Java program
// This program draws a square on the screen (the
// pen starts down)
import turtlegraphics.*;
public class DrawSquare
{
public static void main(String[] args)
throws TurtleException
{
Turtle myTurtle = new Turtle();
}
}
myTurtle.move(500);
myTurtle.turnRight(90);
myTurtle.move(500);
myTurtle.turnRight(90);
myTurtle.move(500);
myTurtle.turnRight(90);
myTurtle.move(500);
myTurtle.turnRight(90);
Compile and run program
javac DrawSquare.java
java DrawSquare
Programming and Problem Solving with Java
11
Turtle and Its World: Errors
A program
with
errors
// This program draws a square on the screen
(WRONG!)
// the pen starts down). This is the same as Listing 2.1, but has
// errors.
import turtlegraphics.*;
ublic class DrawSquare
{
public static void main(args)
threw TurtleException
{
Turtle myTurtle = new Turtle();
}
)
myTurtle.move(500);
myTurtle.turnRight(90),
myTurtle.move(500);
myTurtle.turnRight(90);
myTurtle.move(500);
myTurtle.turnRight(90);
myTurtle.move(500);
myTurtle.turnRight(90;
// should be "public"
// Missing "String[]"
// Should be "throws"
// Should be ";"
// Missing ")"
// Should be ")"
Compiler
finds
3
of
the
6
errors
$ javac DrawSquare.java
DrawSquare.java:7: Class or interface declaration expected.
ublic class DrawSquare
// should be "public"
^
DrawSquare.java:9: Identifier expected.
public static main(args)
// Missing "String[]"
^
DrawSquare.java:23: '}' expected.
}
^
3 errors
Programming and Problem Solving with Java
12
Turtle and Its World: Errors
Fix the three errors found by the compiler
// This program draws a square on the screen (WRONG!)
// the pen starts down). This is the same as before, but has
// errors.
import turtlegraphics.*;
public class DrawSquare
// fixed
{
public static void main(String[] args) // fixed
threw TurtleException
// Should be "throws"
{
Turtle myTurtle = new Turtle();
}
}
myTurtle.move(500);
myTurtle.turnRight(90),
myTurtle.move(500);
myTurtle.turnRight(90);
myTurtle.move(500);
myTurtle.turnRight(90);
myTurtle.move(500);
myTurtle.turnRight(90;
// Should be ";"
// Missing ")"
// fixed
Compiler finds one more error
$ javac DrawSquare.java
DrawSquare.java:5: '{' expected.
public static main(String[] args)
^
1 error
Programming and Problem Solving with Java
// fixed
13
Turtle and Its World: Errors
Fix//the
error
This program draws a square on the screen
(WRONG!)
// the pen starts down). This is the same as before, but has
// errors.
import turtlegraphics.*;
public class DrawSquare
// fixed
{
public static void main(String[] args) // fixed
throws TurtleException
// fixed
{
Turtle myTurtle = new Turtle();
}
}
myTurtle.move(500);
myTurtle.turnRight(90),
myTurtle.move(500);
myTurtle.turnRight(90);
myTurtle.move(500);
myTurtle.turnRight(90);
myTurtle.move(500);
myTurtle.turnRight(90;
// Should be ";"
// Missing ")"
// fixed
Compiler
finds
last
2
errors
plus
one
more
(spurious)
$ javac DrawSquare.java
DrawSquare.java:15: ';' expected.
myTurtle.turnRight(90),
// Should be ";"
^
DrawSquare.java:25: Unbalanced parentheses.
^
DrawSquare.java:25: '}' expected.
^
3 errors
Programming and Problem Solving with Java
14
Java Program Structure
Compiler doesn’t understand turtle graphics
instructions by themselves
Must put in a skeleton program
// A comment that describes the program
import turtlegraphics.*;
public class ClassName
{
public static void main(String[] args)
throws TurtleException
{
Turtle myTurtle = new Turtle();
// Put turtle instructions here
}
}
Programming and Problem Solving with Java
15
Java Program Structure
Class name, turtle name are identifiers
public class ClassName
Turtle myTurtle = new Turtle();
Identifier naming rules
First character must be letter, underscore, or dollar sign
Remaining character must be letters, underscores, dollar
signs, or digits
Can’t use spaces in an identifier
Can’t use reserved words (keywords) -- see next slide
Should use a meaningful name
Class names should start with capital letter: DrawStar,
DrawLine, ...
Turtle names should start with lower case letter:
myTurtle, aTurtle, ...
Programming and Problem Solving with Java
16
Java Program Structure
Keywords in Java
abstract
boolean
break
byte
byvalue*
case
cast*
catch
char
class
const*
continue
default
do
double
else
extends
false
final
finally
float
for
future*
generic*
goto*
if
implements
import
inner*
instanceof
int
interface
long
native
new
null
operator*
outer*
package
private
protected
public
rest*
return
short
static
super
switch
synchronized
this
throw
throws
transient
true
try
var*
void
volatile
while
*
Reserved but not used in Java version 1.1.
Programming and Problem Solving with Java
17
Java Program Structure: 5-Star
Example: Write program to
draw a 5-sided star
Steps:
1. Pick up the pen.
2. Move to an outer corner.
3. Turn around.
4. Put the pen down.
5. Draw the first of the star's five lines.
6. Turn to get ready for the next line.
7. Continue steps 5 and 6 for the other
four lines.
Programming and Problem Solving with Java
18
Java Program Structure: 5-Star
To choose angle between sides
Turtle Trip Theorem
Whenever the turtle starts and stops in the same
place, facing the same direction, the sum of all
the angles the turtle turned is a multiple of 360
Let’s try 72 degrees (360 / 5)
Programming and Problem Solving with Java
19
Java Program Structure: 5-Star
First try at 5-sided star
// This program draws a five-sided star
Wrong
import turtlegraphics.*;
public class DrawStar
{
public static void main(String[] args)
throws TurtleException
{
Turtle myTurtle = new Turtle();
}
}
myTurtle.penUp();
myTurtle.move(150);
myTurtle.turnRight(180);
myTurtle.penDown();
myTurtle.move(300);
myTurtle.turnRight(72);
myTurtle.move(300);
myTurtle.turnRight(72);
myTurtle.move(300);
myTurtle.turnRight(72);
myTurtle.move(300);
myTurtle.turnRight(72);
myTurtle.move(300);
myTurtle.turnRight(72);
Programming and Problem Solving with Java
//
//
//
//
//
//
//
//
//
//
//
//
//
//
pick up the pen
move to top of star
turn around
put the pen down
draw first side
turn for next side
draw second side
turn for next side
draw third side
turn for next side
draw fourth side
turn for next side
draw fifth side
finish up
Oops!
20
Java Program Structure: 5-Star
Go back to the theorem
Turtle Trip Theorem
Whenever the turtle starts and stops in the same
place, facing the same direction, the sum of all
the angles the turtle turned is a multiple of 360
Try 144 degrees
Check it first
Programming and Problem Solving with Java
Before the
turn
Draw next side
of the star
Turn 144 o
144 o
21
Java Program Structure: 5-Star
Second try at 5-sided star
// This program draws a five-sided star
import turtlegraphics.*;
public class DrawStar
{
public static void main(String[] args)
throws TurtleException
{
Turtle myTurtle = new Turtle();
}
}
myTurtle.penUp();
myTurtle.move(150);
myTurtle.turnRight(180);
myTurtle.penDown();
myTurtle.move(300);
myTurtle.turnRight(144);
myTurtle.move(300);
myTurtle.turnRight(144);
myTurtle.move(300);
myTurtle.turnRight(144);
myTurtle.move(300);
myTurtle.turnRight(144);
myTurtle.move(300);
myTurtle.turnRight(144);
Programming and Problem Solving with Java
//
//
//
//
//
//
//
//
//
//
//
//
//
//
pick up the pen
move to top of star
turn around
put the pen down
draw first side
turn for next side
draw second side
turn for next side
draw third side
turn for next side
draw fourth side
turn for next side
draw fifth side
finish up
Almost -- but
still need
to make the
star
stand straight!
22
Classes and Methods
The Turtle class is pretty dumb -- can’t turn left!
Can’t do anything about that -- it’s hopeless
BUT can make class of smarter turtles!
Skeleton
for a new class
class SmartTurtle extends Turtle
{
// First method
public void nameOfMethod()
throws TurtleException
{
// Statements go here
}
// Second method
public void nameOfMethod()
throws TurtleException
{
// Statements go here
}
// Third method
public void nameOfMethod()
throws TurtleException
{
// Statements go here
}
}
// More methods go here ...
Programming and Problem Solving with Java
23
Classes and Methods
How to turn 90 degrees to the left
(a) Turtle starts
facing up
0o
270o
(b) Want turtle
to turn 90o left
90o
270o
180o
(c) Turn 180o to
the right
Programming and Problem Solving with Java
(d) Turn 90o
m ore, giving a
90o left turn
90o
180o
90o
180o
0o
270o
0o
0o
270o
90o
180o
24
Classes and Methods
Here’s the turnLeft90 method
class SmartTurtle extends Turtle
{
// turnLeft90: Turns the turtle 90 degrees to the left
public void turnLeft90()
throws TurtleException
{
this.turnRight(180);
this.turnRight(90);
}
}
The word “this” refers to a particular SmartTurtle
Can’t use myTurtle, because that might not be the name
of the particular SmartTurtle we’re using
“this” means whatever SmartTurtle we’re using (“this
one”)
Programming and Problem Solving with Java
25
Classes and Methods
Example
program
// This program draws a square using left turns
// (The SmartTurtle class is highlighted.)
import turtlegraphics.*;
class SmartTurtle extends Turtle
{
// turnLeft90: Turns the turtle 90 degrees to the left
public void turnLeft90()
throws TurtleException
{
this.turnRight(180);
this.turnRight(90);
}
}
Define as SmartTurtle -regular turtles can’t turn
left
public class DrawLeftSquare
{
public static void main(String[] args)
throws TurtleException
{
SmartTurtle mySmartTurtle = new SmartTurtle();
}
}
mySmartTurtle.move(300);
mySmartTurtle.turnLeft90();
mySmartTurtle.move(300);
mySmartTurtle.turnLeft90();
mySmartTurtle.move(300);
mySmartTurtle.turnLeft90();
mySmartTurtle.move(300);
mySmartTurtle.turnLeft90();
Programming and Problem Solving with Java
The new method
26
Classes and Methods
Result
Programming and Problem Solving with Java
27
Classes and Methods
Can
add
more
methods
to
SmartTurtle
class
class SmartTurtle extends Turtle
{
// turnLeft90: Turns the turtle 90 degrees to the left
public void turnLeft90()
throws TurtleException
{
this.turnRight(180);
this.turnRight(90);
}
// turnLeft45: Turns the turtle 45 degrees to the left
public void turnLeft45()
throws TurtleException
{
this.turnRight(180);
this.turnRight(135);
}
}
// drawSquare150: Draws a square with sides of size 150
public void drawSquare150()
throws TurtleException
{
this.move(150);
this.turnRight(90);
this.move(150);
this.turnRight(90);
this.move(150);
this.turnRight(90);
this.move(150);
this.turnRight(90);
}
Programming and Problem Solving with Java
28
Classes and Methods
Example
of
how
to
use
new
SmartTurtle
class
// This program draws eight squares with one corner in
// common, and 45 degree angle between successive squares
// (The SmartTurtle class is highlighted.)
import turtlegraphics.*;
SmartTurtle class goes here
public class Draw8Squares
{
public static void main(String[] args)
throws TurtleException
{
SmartTurtle mySmartTurtle = new SmartTurtle();
}
}
mySmartTurtle.drawSquare150();
mySmartTurtle.turnLeft45();
mySmartTurtle.drawSquare150();
mySmartTurtle.turnLeft45();
mySmartTurtle.drawSquare150();
mySmartTurtle.turnLeft45();
mySmartTurtle.drawSquare150();
mySmartTurtle.turnLeft45();
mySmartTurtle.drawSquare150();
mySmartTurtle.turnLeft45();
mySmartTurtle.drawSquare150();
mySmartTurtle.turnLeft45();
mySmartTurtle.drawSquare150();
mySmartTurtle.turnLeft45();
mySmartTurtle.drawSquare150();
mySmartTurtle.turnLeft45();
Programming and Problem Solving with Java
29
Parameters
SmartTurtle methods are useful
BUT do we need to write a
separate method for each
size square?
No -- can use parameters to make
methods more general-purpose
Example
turnRight(120);
move(300);
Parameters make these methods
general-purpose
Programming and Problem Solving with Java
30
Parameters
Example of a method with parameters
With parameters
// drawSquare: Draws a square of
//
the given size
public void drawSquare(int size)
throws TurtleException
{
this.move(size);
this.turnRight(90);
this.move(size);
this.turnRight(90);
this.move(size);
this.turnRight(90);
this.move(size);
this.turnRight(90);
}
Programming and Problem Solving with Java
Without parameters
// drawSquare150: Draws a square
//
of size 150
public void drawSquare150()
throws TurtleException
{
this.move(150);
this.turnRight(90);
this.move(150);
this.turnRight(90);
this.move(150);
this.turnRight(90);
this.move(150);
this.turnRight(90);
}
31
Parameters
How to use a method with parameters
// Draws a set of squares, connected at one corner,
// where each square is rotated 60 degrees and a little
// larger than the one before.
import turtlegraphics.*;
class NewTurtle extends Turtle
{
// drawSquare: Draws a square of the given size
public void drawSquare(int size)
throws TurtleException
{
this.move(size);
this.turnRight(90);
this.move(size);
this.turnRight(90);
this.move(size);
this.turnRight(90);
this.move(size);
this.turnRight(90);
}
}
(continued)
Programming and Problem Solving with Java
32
Parameters
How to use a method with parameters (continued)
public class DrawRotatingSquares
{
public static void main(String[] args)
throws TurtleException
{
NewTurtle aTurtle = new NewTurtle();
}
}
aTurtle.drawSquare(100);
aTurtle.turnRight(60);
aTurtle.drawSquare(150);
aTurtle.turnRight(60);
aTurtle.drawSquare(200);
aTurtle.turnRight(60);
aTurtle.drawSquare(250);
aTurtle.turnRight(60);
aTurtle.drawSquare(300);
aTurtle.turnRight(60);
aTurtle.drawSquare(350);
aTurtle.turnRight(60);
Programming and Problem Solving with Java
33
Parameters: More than One
Can use more than one parameter in a method
Example
// drawRectangle: Draws a rectangle of the given height and width
public void drawRectangle(int height, int width)
throws TurtleException
{
this.move(height);
this.turnRight(90);
this.move(width);
this.turnRight(90);
this.move(height);
this.turnRight(90);
this.move(width);
this.turnRight(90);
}
To use
myTurtle.drawRectangle(200, 300);
First number goes into height
Second number goes into width
Programming and Problem Solving with Java
34
Parameters: More than One
Example
of
more
than
one
parameter
// Draws a "stair-step" using rectangles.
import turtlegraphics.*;
class RectTurtle extends Turtle
{
// drawRectangle: Draws a rectangle of the given height and width
public void drawRectangle(int height, int width)
throws TurtleException
{
this.move(height);
this.turnRight(90);
this.move(width);
this.turnRight(90);
this.move(height);
this.turnRight(90);
this.move(width);
this.turnRight(90);
}
}
public class DrawFiveRectangles
{
public static void main(String[] args)
throws TurtleException
{
RectTurtle aTurtle = new RectTurtle();
}
}
aTurtle.drawRectangle(100,
aTurtle.drawRectangle(200,
aTurtle.drawRectangle(300,
aTurtle.drawRectangle(400,
aTurtle.drawRectangle(500,
Programming and Problem Solving with Java
500);
400);
300);
200);
100);
35
Reusing Classes
Will probably want to use SmartTurtle in many
programs
Could retype SmartTurtle class in each program -- yuck!
Could cut and paste it -- still tedious
There is a better way...
Import the class!
Save SmartTurtle to the file SmartTurtle.java
Put this line at beginning of any program that uses
SmartTurtle
import SmartTurtle;
(Note: Make sure SmartTurtle.java is in the same directory or on the
CLASSPATH -- see Java docs for details.)
Programming and Problem Solving with Java
36
Reusing Classes
Example:
Save
this
to
SmartTurtle.java
// A smarter turtle class
import turtlegraphics.*;
public class SmartTurtle extends Turtle
{
// drawRectangle: Draws a rectangle of the given height and width
public void drawRectangle(int height, int width)
throws TurtleException
{
this.move(height);
this.turnRight(90);
this.move(width);
this.turnRight(90);
this.move(height);
this.turnRight(90);
this.move(width);
this.turnRight(90);
}
}
// drawSquare: Draws a square of the given size
public void drawSquare(int size)
throws TurtleException
{
this.move(size);
this.turnRight(90);
this.move(size);
this.turnRight(90);
this.move(size);
this.turnRight(90);
this.move(size);
this.turnRight(90);
}
Programming and Problem Solving with Java
37
Reusing Classes
Example: Now use SmartTurtle in a new program
// This program draws a square on the screen
import turtlegraphics.*;
import SmartTurtle;
Import the
SmartTurtle class
public class DrawSquare
{
public static void main(String[] args)
throws TurtleException
{
SmartTurtle mySmartTurtle = new SmartTurtle();
}
}
mySmartTurtle.drawSquare(300);
Use the
SmartTurtle
class
Programming and Problem Solving with Java
38
Reusing Classes: Changing
Can change the methods in a reusable class
Important to not break programs that use it, though
Be careful when changing an existing method -- should
work about the same as before
Adding a new method is ok -- won’t break existing
programs
Example: add goBack method
Make turtle move backward without drawing
Steps:
1. Pick up the pen.
2. Turn around.
3. Move the desired distance.
4. Turn around again.
5. Put the pen down.
Programming and Problem Solving with Java
39
Reusing Classes: Changing
goBack method
// goBack: (First version) Moves the turtle backward without
//
drawing anything. The pen must be down.
public void goBack(int distance)
throws TurtleException
{
this.penUp();
this.turnRight(180);
this.move(distance);
this.turnRight(180);
this.penDown();
}
Method assumes the pen is down
If pen is up, then method won’t work
Precondition
Statement that must be true for the method to work
correctly
goBack precondition: The pen must be down.
Programming and Problem Solving with Java
40
Reusing Classes: Changing
New SmartTurtle class
// A smarter turtle class
import turtlegraphics.*;
public class SmartTurtle extends Turtle
{
// drawRectangle: draws a rectangle of the given height and width
public void drawRectangle(int height, int width)
throws TurtleException
{
this.move(height);
this.turnRight(90);
this.move(width);
this.turnRight(90);
this.move(height);
this.turnRight(90);
this.move(width);
this.turnRight(90);
}
(continued)
Programming and Problem Solving with Java
41
Reusing Classes: Changing
New SmartTurtle class (continued)
// drawSquare: Draws a square of the given size
public void drawSquare(int size)
throws TurtleException
{
this.move(size);
this.turnRight(90);
this.move(size);
this.turnRight(90);
this.move(size);
this.turnRight(90);
this.move(size);
this.turnRight(90);
}
}
// goBack: (First version) Moves the turtle backward without
//
drawing anything. The pen must be down.
public void goBack(int distance)
throws TurtleException
{
this.penUp();
this.turnRight(180);
this.move(distance);
this.turnRight(180);
this.penDown();
}
Programming and Problem Solving with Java
42
Reusing Classes: Changing
Program
that
uses
the
new
SmartTurtle
class
// Draws a large asterisk in the center of the screen
import turtlegraphics.*;
import SmartTurtle;
public class DrawAsterisk
{
public static void main(String[] args)
throws TurtleException
{
SmartTurtle mySmartTurtle = new SmartTurtle();
}
}
mySmartTurtle.move(300);
mySmartTurtle.goBack(300);
mySmartTurtle.turnRight(60);
mySmartTurtle.move(300);
mySmartTurtle.goBack(300);
mySmartTurtle.turnRight(60);
mySmartTurtle.move(300);
mySmartTurtle.goBack(300);
mySmartTurtle.turnRight(60);
mySmartTurtle.move(300);
mySmartTurtle.goBack(300);
mySmartTurtle.turnRight(60);
mySmartTurtle.move(300);
mySmartTurtle.goBack(300);
mySmartTurtle.turnRight(60);
mySmartTurtle.move(300);
mySmartTurtle.goBack(300);
mySmartTurtle.turnRight(60);
Programming and Problem Solving with Java
43
The if Statement
The goBack method is not as useful as could be
Need to ensure the pen is down beforehand
Would be better if goBack worked regardless of pen
status
The if statement can help
Syntax
if (condition)
{
statements
}
If the condition is true, the computer executes the
statement
Indentation of statements ignored by compiler
VERY important, though -- shows structure of program to
human reader (statements are part of if statement)
Programming and Problem Solving with Java
44
The if Statement
Condition we can use for goBack: isPenDown
if (this.isPenDown())
{
this.penUp();
}
Be careful to NOT put a semicolon after first line
if (this.isPenDown());
{
this.penUp();
}
Wrong!
Semicolon removes if statement checking! (this.penUp
always executes, regardless of pen status)
Programming and Problem Solving with Java
45
The if Statement
New version of goBack
Steps
1. Pick up the pen if it's down
2. Move the turtle backward
Code
// goBack: (Second version) Moves the turtle backward without
//
drawing anything. The pen must be down.
public void goBack(int distance)
throws TurtleException
{
// Pick up the pen if it's down
if (this.isPenDown())
{
this.penUp();
}
}
// Move the turtle backward
this.turnRight(180);
this.move(distance);
this.turnRight(180);
Programming and Problem Solving with Java
New problem:
always leaves the
pen up!
46
The if Statement
Another new version of goBack
Steps
1. Pick up the pen if it's down
2. Move the turtle backward
3. Put the pen down if it was down before
Code
// Pick up the pen if it's down
if (this.isPenDown())
{
this.penUp();
}
// Move the turtle backward
this.turnRight(180);
this.move(distance);
this.turnRight(180);
What goes here??
// Put the pen down if it was down before
if (????)
{
this.penDown();
}
Programming and Problem Solving with Java
47
The if Statement
Need a way to check if pen was down before
// Pick up the pen if it's down
if (this.isPenDown())
{
this.penUp();
}
// Move the turtle backward
this.turnRight(180);
this.move(distance);
this.turnRight(180);
// Put the pen down if it was down before
if (????)
{
this.penDown();
}
Can’t use isPenDown to check -- it’s always up at the
end
Solution -- use a Boolean variable
Programming and Problem Solving with Java
48
The if Statement
Boolean variable -- stores either true or false
// goBack: (Final version) Moves the turtle backward without
//
drawing anything. The pen must be down.
public void goBack(int distance)
throws TurtleException
{
// Remember how the pen was at the beginning
boolean penWasDownAtBeginning = this.isPenDown();
// Pick up the pen if it's down
if (this.isPenDown())
{
this.penUp();
}
// Move the turtle backward
this.turnRight(180);
this.move(distance);
this.turnRight(180);
}
// Put the pen down if it was down before
if (penWasDownAtBeginning)
{
this.penDown();
}
Programming and Problem Solving with Java
Store
pen’s
status
Recall
pen’s
status
49
The if Statement
Example using new goBack method
// This program draws a large square, then
// another smaller one below.
import turtlegraphics.*;
import SmartTurtle;
public class DrawTwoSquares
{
public static void main(String[] args)
throws TurtleException
{
SmartTurtle myTurtle = new SmartTurtle();
}
}
myTurtle.drawSquare(200);
myTurtle.goBack(200);
myTurtle.drawSquare(100);
Programming and Problem Solving with Java
50
The if Statement
The maxMove method
Tells the distance from the turtle
to the wall it’s facing
Example
// This program demonstrates the use of
// maxMove. It draws a sunburst pattern.
import turtlegraphics.*;
import SmartTurtle;
public class DrawSunburst
{
public static void main(String[] args)
throws TurtleException
{
SmartTurtle myTurtle = new SmartTurtle();
myTurtle.goBack(200);
}
}
// Draw 120 lines from center of drawing area to edge
for (int count = 0; count < 120; count++)
{
int max = myTurtle.maxMove();
myTurtle.move(max);
myTurtle.goBack(max);
myTurtle.turnRight(3);
}
Programming and Problem Solving with Java
51
The if Statement
Can use maxMove to see if safe to move
if (myTurtle.maxMove() > 150)
{
myTurtle.move(100);
}
> is relational operator -- tells whether an amount is
greater than another amount
Operator
Meaning
Example
>
greater than
if (myTurtle.maxMove() > 150) ...
<
less than
if (myTurtle.maxMove() < 100) ...
==
equal to
if (myTurtle.maxMove() == 100) ...
!=
not equal to
if (myTurtle.maxMove() != 300) ...
<=
less than or equal to
if (myTurtle.maxMove() <= 200) ...
>=
greater than or equal to
if (myTurtle.maxMove() >= 350) ...
Programming and Problem Solving with Java
52
The if Statement: if-else
Now have turnRight and turnLeft instructions
turnRight is in Turtle (and also can use in SmartTurtle)
turnLeft is in SmartTurtle
What more do we need??
Would be handy to have a turn method
Could turn (right) any amount from 0 to 360
Steps
1. If the angle to turn is 180 or less, use a single turnRight instruction.
2. If the angle to turn is more than 180 degrees, turn to the right 180 degrees,
then use turnRight to turn the remaining amount.
Can use if-else statement for this
Programming and Problem Solving with Java
53
The if Statement: if-else
if-else Statement
Syntax
if (condition)
{
statement1
{
else
{
statement2
}
condition true do statement1, otherwise statement2
General turn method
// turn: Turn to the right, from 0 to 360 degrees
void turn(int degrees)
{
if (degrees <= 180)
{
this.turnRight(degrees);
}
else
{
this.turnRight(180);
this.turnRight(degrees - 180);
}
}
Programming and Problem Solving with Java
54
The for Statement
How to draw this figure?
Keep drawing squares, but rotate a little between
Programming and Problem Solving with Java
55
The for Statement
One way to draw the figure
myTurtle.drawSquare(350);
myTurtle.turnRight(6);
myTurtle.drawSquare(350);
myTurtle.turnRight(6);
myTurtle.drawSquare(350);
myTurtle.turnRight(6);
// ... 57 more drawSquare and turnRight instructions here ...
So what’s the problem?
Easy to do with a good text editor (paste-paste-paste ...)
BUT -- it’s tedious
AND -- it’s error-prone (may lose count)
There MUST be a BETTER WAY!!
Programming and Problem Solving with Java
56
The for Statement
Solution: the for statement
Makes the computer repeat a group of statements
Syntax
for (int counter = startValue; counter <= endValue; counter++)
{
statement
}
Note no
semicolon
here
startValue tells where to start counting
endValue tells where to stop counting
statement is a Java instruction we want computer to
repeat
counter is a variable -- a name that holds a value
counter keeps track of how many times computer has
executed statement
Programming and Problem Solving with Java
57
The for Statement
Example of for statement
// Turn 45 degrees to the right, 1 degree at a time
import turtlegraphics.*;
public class TurnSlowly
{
public static void main(String[] args)
throws TurtleException
{
Turtle aTurtle = new Turtle();
}
}
for (int count = 1; count <= 45; count++)
{
aTurtle.turnRight(1);
}
Slow, but it works!
Programming and Problem Solving with Java
Indentation VERY important
in for statement, too -shows that statement is part
of the for statement
58
The for Statement
Can put more than one statement between { and }
for (int side = 1; side <= 4; side++)
{
aTurtle.move(200);
aTurtle.turnRight(90);
}
Same result as
aTurtle.move(200);
aTurtle.turnRight(90);
aTurtle.move(200);
aTurtle.turnRight(90);
aTurtle.move(200);
aTurtle.turnRight(90);
aTurtle.move(200);
aTurtle.turnRight(90);
Programming and Problem Solving with Java
59
The for Statement
Example of for statement
// Draws 60 squares connected at a corner, and
// rotated 6 degrees between successive squares.
import turtlegraphics.*;
import SmartTurtle;
public class DrawRotatedSquares
{
public static void main(String[] args)
throws TurtleException
{
SmartTurtle aTurtle = new SmartTurtle();
}
}
for (int count = 1; count <= 60; count++)
{
aTurtle.drawSquare(350);
aTurtle.turnRight(6);
}
Programming and Problem Solving with Java
60
The for Statement: Drawing Shapes
Rotating a shape
Just saw that we can rotate a shape
in a circle with a for statement
Let’s try it with triangles
Put this in SmartTurtle class
// drawEqTriangle: Draws an equilateral triangle of the
//
given size
void drawEqTriangle(int size)
throws TurtleException
{
for (int side = 1; side <= 3; side++)
{
this.move(size);
this.turnRight(120);
}
}
Programming and Problem Solving with Java
61
The for Statement: Drawing Shapes
Try rotating triangles
Draw 6 triangles, 16 degrees between each
// This program is supposed to draw triangles rotated
// in a circle
import turtlegraphics.*;
import SmartTurtle;
public class DrawRotatedTriangles
{
public static void main(String[] args)
throws TurtleException
{
SmartTurtle aTurtle = new SmartTurtle();
}
}
for (int count = 1; count <= 6; count++)
{
aTurtle.drawEqTriangle(300);
aTurtle.turnRight(16);
}
Programming and Problem Solving with Java
62
The for Statement: Drawing Shapes
Try three times as many triangles
Draw 18 triangles, 16 degrees between each
// This program is supposed to draw triangles rotated
// in a circle
import turtlegraphics.*;
import SmartTurtle;
public class DrawRotatedTriangles
{
public static void main(String[] args)
throws TurtleException
{
SmartTurtle aTurtle = new SmartTurtle();
}
}
for (int count = 1; count <= 18; count++)
{
aTurtle.drawEqTriangle(300);
aTurtle.turnRight(16);
}
Programming and Problem Solving with Java
63
The for Statement: Drawing Shapes
Add a few more triangles and we’ll be done (??)
Draw 22 triangles, 16 degrees between each
// This program is supposed to draw triangles rotated
// in a circle
import turtlegraphics.*;
import SmartTurtle;
public class DrawRotatedTriangles
{
public static void main(String[] args)
throws TurtleException
{
SmartTurtle aTurtle = new SmartTurtle();
}
}
for (int count = 1; count <= 18; count++)
{
aTurtle.drawEqTriangle(300);
aTurtle.turnRight(16);
}
Programming and Problem Solving with Java
64
The for Statement: Drawing Shapes
How to make the drawing symmetrical?
degrees x numberOfTriangles = 360
Can solve for degrees or
numberOfTriangles
numberOfTriangles = 360 ÷ degrees
degrees = 360 ÷ numberOfTriangles
Use either of these formulas to
figure out the degrees and
number of triangles to draw
degrees
= 360 ÷ numberOfTriangles
degrees
= 360 ÷ numberOfTriangles
= 360 ÷ 15
= 360 ÷ 16
= 24
= 22.5
Programming and Problem Solving with Java
Must make sure
number of triangles
divides into 360
evenly 65
The for Statement: Drawing Shapes
Use the formula
Draw 15 triangles, 24 degrees between each
// This program is supposed to draw triangles rotated
// in a circle
import turtlegraphics.*;
import SmartTurtle;
public class DrawRotatedTriangles
{
public static void main(String[] args)
throws TurtleException
{
SmartTurtle aTurtle = new SmartTurtle();
}
}
for (int count = 1; count <= 18; count++)
{
aTurtle.drawEqTriangle(300);
aTurtle.turnRight(16);
}
Programming and Problem Solving with Java
66
The for Statement: Drawing Shapes
How to draw growing, rotating squares
Our approach
for (int squareNum = 1; squareNum <= 20; squareNum++)
{
aTurtle.drawSquare(????);
// What goes here?
aTurtle.turnRight(18);
}
Programming and Problem Solving with Java
67
The for Statement: Drawing Shapes
Let’s try using the for statement counter variable for
the size of each square
for (int squareNum = 1; squareNum <= 20; squareNum++)
{
aTurtle.drawSquare(squareNum); // Change to squareNum
aTurtle.turnRight(18);
}
Result
Programming and Problem Solving with Java
It’s correct,
but too small
68
The for Statement: Drawing Shapes
Try drawing more squares -- increase the number of
loops
// Change 20, 400
for (int squareNum = 20; squareNum <= 400; squareNum++)
{
aTurtle.drawSquare(squareNum);
aTurtle.turnRight(18);
}
Result
Programming and Problem Solving with Java
Too many
squares!
69
The for Statement: Drawing Shapes
Let’s go back to drawing 20 squares, but make
each one bigger
// This program draws a series of growing,
// rotating squares.
import turtlegraphics.*;
import SmartTurtle;
public class DrawGrowingSquares
{
public static void main(String[] args)
throws TurtleException
{
SmartTurtle aTurtle = new SmartTurtle();
}
}
for (int squareNum = 1; squareNum <= 20; squareNum++)
{
aTurtle.drawSquare(squareNum * 20);
aTurtle.turnRight(18);
}
Programming and Problem Solving with Java
Mulitply counter by 20
for square size
Result
70
The for Statement: Drawing Shapes
How to draw regular polygons
Closed shape with all sides the same length, and all
angles between the sides the same
Equilateral triangle
Square
Pentagon
Hexagon
Octagon (8 sides)
Dodecagon (12 sides)
Programming and Problem Solving with Java
71
The for Statement: Drawing Shapes
Write a method for drawing polygons: drawPolygon
Use to draw a square
myTurtle.drawPolygon(4, 100);
Use to draw an equilateral triangle
myTurtle.drawPolygon(3, 300);
Approach
// drawPolygon: Draws a regular polygon with the given number of
//
sides, and all sides are of length size
void drawPolygon(int numSides, int size)
throws TurtleException
{
for (????)
// How many sides to draw?
{
this.move(size);
this.turnRight(????);
// What angle to turn?
}
}
Problems
How many sides to draw?
What angle to turn?
Programming and Problem Solving with Java
72
The for Statement: Drawing Shapes
Number of sides for drawPolygon is easy
Use for statement to count sides
for (int side = 1; side <= numSides; side++)
Shows that for statement can count up to a variable
(instead of a fixed end value)
Start value can also be a variable (instead of 1)
Programming and Problem Solving with Java
73
The for Statement: Drawing Shapes
Computing the angle for drawPolygon is trickier
Might think to use 60 degrees for triangle
BUT ... need to consider the outside angle, not inside
Inside angle
Outside angle
120 o
60o
Therefore, use 120 degrees when drawing a triangle
Programming and Problem Solving with Java
74
The for Statement: Drawing Shapes
The drawPolygon method
// drawPolygon: Draws a regular polygon with the given number of
//
sides, and all sides are of length size
void drawPolygon(int numSides, int size)
throws TurtleException
{
for (int side = 1; side <= numSides; side++)
{
this.move(size);
this.turnRight(360 / numSides);
}
}
Testing the method
Programming and Problem Solving with Java
75
The for Statement: Drawing Shapes
Testing drawPolygon
3 sides
4 sides
5 sides
6 sides
7 sides
Doesn’t connect
8 sides
9 sides
Programming and Problem Solving with Java
10 sides
11 sides
76
The for Statement: Drawing Shapes
Testing drawPolygon
Some polygons don’t connect
The first line doesn’t connect
to the last
11 sides
For 11 sides, turtle should turn
360 / 11 = 32.72 degrees
Turtle can only turn whole degrees,
so it turns 32 degrees
Each angle is a little less than necessary
Solution
Add precondition to drawPolygon
// The number of sides must divide into 360 evenly
Programming and Problem Solving with Java
77
Software Documentation
Successful computer programs usually have
Well-written programs with poor manuals rarely
successful
Pays to write
good documentation
Programming and Problem Solving with Java
78
Software Documentation
Types of documents
Process documentation: for communication between
members of the software development team members
while they are writing the software
System documentation: programmers use to maintain
and update the software
Product documentation: for people who will use the
software
Programming and Problem Solving with Java
79
Software Documentation
Sometimes programmers write documents for endusers
Problem with this...
Programmers have a functional view of the program -how it works internally
End users have a task view of the program -- how the
program can solve a problem
Document writers need to keep the audience in
mind
Programming and Problem Solving with Java
80
Software Documentation
High
Kinds of document users
Expert User
High computer skill
High technical skill
Novice User
Low computer skill
Low technical skill
System Administrator
High computer skill
Low technical skill
Low
Technical skill
Technical User
Low computer skill
High technical skill
Low
Programming and Problem Solving with Java
Computer skill
High
81
Software Documentation: End-user
General system guide
Describes the purpose
and major features of
the software
SuperDuperSPELL
General System Guide
Page 1
Introduction
Welcome to SuperDuperSPELL and congratulations! You
have purchased a product of unsurpassed quality and
value. SuperDuperSPELL is a program that checks the
spelling of w ord processing documents. SuperDuperSPELL
w orks on any know n w ord processing document, and
recognizes any w ritten language that uses the Roman
alphabet.
SuperDuperSPELL w as designed to be easy to use, fast,
and versatile. It is ideal for use on any length document. In
addition to the main dictionary, up to thirty separate user
dictionaries may be used w hile checking a file.
When SuperDuperSPELL runs, it show s unknow n w ords in
context. You then select an option for each w ord from a
menu. Menu options include:
Add w ord to main dictionary: extends the main dictionary by
adding the unknow n w ord to it.
Exit after marking remaining w ords: marks all the remaining
unknow n w ords in the document, then exits. This is useful
w hen you w ant to stop SuperDuperSPELL in a hurry.
Guess correct spelling: SuperDuperSPELL can find the
correct spelling of any misspelled w ord using sophisticated
artificial intelligence techniques.
Programming and Problem Solving with Java
82
Software Documentation: End-user
Tutorial
Short exercise that
shows user how to
get started using
the software
SuperDuperSPELL
Tutorial
Page 1
This is a step by step method for learning to use
SuperDuperSPELL. It should take you about 20 minutes to
go through these steps. When you finish, you'll be able to
use SuperDuperSPELL for many of your day-to-day
spelling needs. Later, after you have used
SuperDuperSPELL for a w hile, you might w ant to refer to
the User's Guide for more information. The User's Guide
explains how to use SuperDuperSPELL's additional
features.
There are some sample text files in your
SuperDuperSPELL directory. These sample files are
duplicated in this section. They are provided in disk form,
so that you can easily duplicate the steps in this section.
Before you go any further in this tutorial, make sure that you
have follow ed the steps listed in the Installation Guide, or
your system administrator has installed SuperDuperSPELL
for you.
Step 1: How to Start SuperDuperSPELL
Start up your computer system, then move your mouse
pointer over the SuperDuperSPELL icon as show n below ,
then click on the mouse button tw ice.
Your computer's display should look like Figure 1.
Programming and Problem Solving with Java
83
Software Documentation: End-user
User’s guide
Takes the user from a
beginner (just after
following the tutorial)
to a competent user
SuperDuperSPELL
User's Guide
Page 23
Adding Words to the Main Dictionary
You w ill probably w ant to add a w ord to the main dictionary
for those few w ords that are not in SuperDuperSPELL's
database. The Add command w ill do this.
To add a w ord to the main directionary, select Add from the
Options menu. Type the w ord in the box, then select the
OK button. (See figure 5.)
Add Word
misspell
OK
Cancel
He lp
Figure 5
When you select the OK button, SuperDuperSPELL
compares your w ord w ith w ords in its database. It then
suggests a part of speech for the w ord: noun, verb,
adjective, adverb, or other. (Independent tests show that
SuperDuperSPELL has an accuracy of 87% in determining
the correct part of speech for new w ords.)
SuperDuperSPELL w ill then ask you w hether it has
suggested the correct part of speech. (See the figure on
Programming and Problem Solving with Java
84
Software Documentation: End-user
User’s guide describes
Purpose, capabilities, features of the software
Major methods of the software
For each major technical task:
•A description of the task
•How to accomplish the task
•A sequence of screens images the user will see
•A description of any special features that are available
•A description of the input and output
•How to customize the software so it accomplishes the task with fewer steps
How to get help
How to recover from errors
Programming and Problem Solving with Java
85
Software Documentation: End-user
Reference manual
Use to look up single
features (like a
dictionary)
SuperDuperSPELL
Reference
Page 1
This document is a reference guide for using
SuperDuperSPELL. It is organized so that you can look up
just the information you need, w ithout reading the w hole
manual. If you are new to using SuperDuperSPELL, you
might w ant to read the User's Guide before going further.
Starting SuperDuperSPELL
Start SuperDuperSPELL by double clicking on the
SuperDuperSpell icon. SuperDuperSPELL w ill then ask
you for the name of your text file. You can also select up to
30 additional dictionaries at this time. (See section 8 of this
manual, Using Additional Dictionaries.)
SuperDuperSPELL recognizes the format of documents
created by all existing w ord processors. How ever,
occasionally SuperDuperSPELL may not immediately
recognize a format of a document. In this case, see
section 12 of this manual, SuperDuperSPELL Configuration
Options.
Stopping SuperDuperSPELL
Stop SuperDuperSPELL by selecting the Exit item from the
File menu, or by pressing Control-X. SuperDuperSPELL
w ill save its current state, so that the next time you use
SuperDuperSPELL on this document, SuperDuperSPELL
w ill pick up w here it left off. (Note, this doesn't hold if you
change the document before running SuperDuperSPELL.)
Programming and Problem Solving with Java
86
Software Documentation
Some problems with documentation
Not enough resources allocated for writing
Programmers may write the documentation -(programmers have a functional view)
Writers may not have enough skill or training
Manuals sometimes don't use terms consistently
Manuals sometimes describe old version of the software
Programming and Problem Solving with Java
87
Software Documentation
Features of good documentation
Sufficient time and money to produce quality
documentation
Programmers trained to write documentation (or use of
technical writers)
Documentation uses terms consistently
Documentation is consistent with the software
Research has shown that there are three important
aspects of good software documentation.
Methodical development of concepts
Accuracy and completeness
Sensible grouping of information
Programming and Problem Solving with Java
88
Software Documentation: Writing
Each document should begin with a preface
Purpose for this document
Subject matter of this document
Intended audience of this document
Example: preface for a user’s guide
This is the SuperDuperSPELL User's Guide. We have designed this manual
to help you use SuperDuperSPELL more effectively. This manual begins with
how to start and stop SuperDuperSPELL. It continues with the most used
features such as how to specify a text document to check, how to add a word
to the dictionary, and how to undo an action. The manual explains how to use
additional dictionaries.
If you are new to SuperDuperSPELL, you should follow the tutorial before
reading this manual. If you have used the previous version of
SuperDuperSPELL, you'll want to skim the first three sections and then read
section 4, Changes from Version 3.5. If you need additional information, see
the reference manual.
Programming and Problem Solving with Java
89
Software Documentation: Writing
Each document should have
Table of contents
Index
Glossary of terms (if written for novices)
Good idea to use
Illustrations and other figures
Headings and subheadings
Plenty of examples
Bulleted lists of facts (such as this list)
Programming and Problem Solving with Java
90
Software Documentation: Writing
How to write clearly
Use the active voice instead of the passive voice
•Bad (passive): “The Control-X key must be pressed to stop the program.”
•Good (active): "You press the Control-X key to stop the program.”
•Good (active, imperative mood): "Press the Control-X key when you want to
stop the program.”
Use short sentences and paragraphs
Avoid negatives
•Bad: "When typing a number, do not press a non-digit key.”
•Good: "When typing a number, press only digit keys."
Write a list of steps in chronological order
•Bad: “Before pouring the cake batter into the pan, grease the pan thoroughly.”
•Good: "Grease the pan thoroughly before pouring the cake batter into it."
Programming and Problem Solving with Java
91
Software Documentation: Writing
How to write clearly (continued)
Avoid bias
•Sexual
•Racial
•Cultural
•...
Be careful with humor
People often frustrated when using documentation -- may not be amused
Avoid error messages that make the computer sound
human
Use a consistent style and tone
Define terms
Take the user's point of view
Programming and Problem Solving with Java
92
Software Documentation: Writing
On-line documentation
Tutorials
Error messages
Help messages
Reference manuals
Not the same as printed documentation
People don’t usually read from beginning to end
Usually look up a single topic -- want to find a screen or
two on that topic
Programming and Problem Solving with Java
93
Software Documentation: Writing
Advantages of on-line documentation
Available anytime user is working on the computer
Much cheaper to produce (1/10 cost of printed
documentation)
Usually has fast search facility many entry points
Disadvantages
Harder (on the eyes) to read
Less portable
Doesn't work when the computer isn't working
Long examples difficult to follow
Shouldn't refer to previous pages, examples, or figures
(user may have jumped right into the middle of the
document with a search)
Programming and Problem Solving with Java
94
Software Documentation: Writing
On-line documentation -- context-sensitive help
Special key for help at any time (F1 in most Microsoft
Windows programs, for example)
Help system must guess what user wants, based on
•Menu option user has selected
•Location of mouse pointer
•Most recent error message
•Current dialog user is using
•...
Characteristics of good on-line help
Special key for help at any time
Leave the user’s work on screen -- so user can refer to it
and the help simultaneously
When user is done with help, system should put user
back where he or she was before using help
Programming and Problem Solving with Java
95