Transcript Chapter 6

1
Chapter 6 - Methods
Outline
6.1
6.2
6.3
6.4
6.5
6.6
6.7
6.8
6.9
6.10
6.11
6.12
6.13
6.14
6.15
Introduction
Program Modules in Java
Math-Class Methods
Method Declarations
Argument Promotion
Java API Packages
Random-Number Generation
Example: A Game of Chance
Scope of Declarations
Methods of Class JApplet
Method Overloading
Recursion
Example Using Recursion: The Fibonacci Series
Recursion vs. Iteration
(Optional Case Study) Thinking About Objects: Identifying
Class Operations
 2003 Prentice Hall, Inc. All rights reserved.
2
6.1
Introduction
• Modules
– Small pieces of a problem
• e.g., divide and conquer
– Facilitate design, implementation, operation and
maintenance of large programs
 2003 Prentice Hall, Inc. All rights reserved.
3
6.2
Program Modules in Java
• Modules in Java
– Methods
– Classes
• Java API provides several modules
• Programmers can also create modules
– e.g., programmer-defined methods
• Methods
– Invoked by a method call
– Returns a result to calling method (caller)
– Similar to a boss (caller) asking a worker (called method) to
complete a task
 2003 Prentice Hall, Inc. All rights reserved.
4
boss
worker1
worker4
worker2
worker3
worker5
Fig. 6.1 Hierarchical boss-method/worker-method relationship.
 2003 Prentice Hall, Inc. All rights reserved.
5
6.3
Math-Class Methods
• Class java.lang.Math
– Provides common mathematical calculations
– Calculate the square root of 900.0:
• Math.sqrt( 900.0 )
– Method sqrt belongs to class Math
• Dot (.) allows access to method sqrt
– The argument 900.0 is located inside parentheses
 2003 Prentice Hall, Inc. All rights reserved.
6
M ethod
abs( x )
D escription
absolute value of x (this m ethod also has float, int and long versions)
ceil( x )
rounds x to the sm allest integer not less than x
cos( x )
exp( x )
trigonom etric cosine of x (x is in radians)
exponential m ethod ex
floor( x )
rounds x to the largest integer not greater than x
log( x )
natural logarithm of x (base e)
max( x, y )
pow( x, y )
larger value of x and y (this m ethod also has float, int and long
versions)
sm aller value of x and y (this m ethod also has float, int and long
versions)
x raised to the pow er y (xy)
sin( x )
sqrt( x )
trigonom etric sine of x (x is in radians)
square root of x
tan( x )
trigonom etric tangent of x (x is in radians)
min( x, y )
Fig. 6.2 Math -class m ethods.
 2003 Prentice Hall, Inc. All rights reserved.
E xam ple
abs( 23.7 ) is 23.7
abs( 0.0 ) is 0.0
abs( -23.7 ) is 23.7
ceil( 9.2 ) is 10.0
ceil( -9.8 ) is -9.0
cos( 0.0 ) is 1.0
exp( 1.0 ) is 2.71828
exp( 2.0 ) is 7.38906
floor( 9.2 ) is 9.0
floor( -9.8 ) is -10.0
log( Math. E ) is 1.0
log( Math. E * Math.E ) is 2.0
max( 2.3, 12.7 ) is 12.7
max( -2.3, -12.7 ) is -2.3
min( 2.3, 12.7 ) is 2.3
min( -2.3, -12.7 ) is -12.7
pow( 2.0, 7.0 ) is 128.0
pow( 9.0, 0.5 ) is 3.0
sin( 0.0 ) is 0.0
sqrt( 900.0 ) is 30.0
sqrt( 9.0 ) is 3.0
tan( 0.0 ) is 0.0
7
6.4
Methods Declarations
• Methods
– Allow programmers to modularize programs
• Makes program development more manageable
• Software reusability
• Avoid repeating code
– Local variables
• Declared in method declaration
– Parameters
• Communicates information between methods via method calls
 2003 Prentice Hall, Inc. All rights reserved.
8
6.4
Method Declarations (Cont.)
• Programmers can write customized methods
 2003 Prentice Hall, Inc. All rights reserved.
9
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Outline
// Fig. 6.3: SquareIntegers.java
// Creating and using a programmer-defined method.
import java.awt.Container;
import javax.swing.*;
Declare result to store
square of number
SquareIntegers.
java
public class SquareIntegers extends JApplet {
// set up GUI and calculate squares of integers from 1 to 10
Method init invokes
public void init()
method square (next slide)
{
// JTextArea to display results
JTextArea outputArea = new JTextArea();
// get applet's content pane (GUI component display area)
Container container = getContentPane();
// attach outputArea to container
container.add( outputArea );
int result;
String output = "";
// store result of call to method
// String containing results
Line 21
Declare result to
store square of number
Line 26
Method init invokes
method square
Method square returns int
Line 26
that result
stores
Method square
returns int that
square
result stores
// loop 10 times
for ( int counter = 1; counter <= 10; counter++ ) {
result = square( counter ); // method call
// append result to String output
output += "The square of " + counter + " is " + result + "\n";
} // end for
 2003 Prentice Hall, Inc.
All rights reserved.
10
32
33
34
35
36
37
38
39
40
41
42
43
44
outputArea.setText( output );
// place results in JTextArea
} // end method init
// square method declaration
public int square( int y )
{
return y * y; // return square of y
} // end method square
} // end class SquareIntegers
Outline
SquareIntegers.
java
y is the parameter of
method square
Method square
returns the square of y
Line 38
y is the parameter of
method square
Line 40
Method square
returns the square of y
 2003 Prentice Hall, Inc.
All rights reserved.
11
6.4
Method Declarations (cont.)
• General format of method declaration:
return-value-type method-name( parameter1, parameter2, …, parameterN )
{
declarations and statements
}
• Method can also return values:
return expression;
 2003 Prentice Hall, Inc. All rights reserved.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
12
// Fig. 6.4: MaximumTest.java
// Finding the maximum of three floating-point numbers.
import java.awt.Container;
import javax.swing.*;
Outline
Maximum.java
User inputs three Strings
public class MaximumTest extends JApplet {
// initialize applet by obtaining user input and creating GUI
public void init()
{
// obtain user input
String s1 = JOptionPane.showInputDialog(
"Enter first floating-point value" );
String s2 = JOptionPane.showInputDialog(
"Enter second floating-point value" );
Convert Strings
String s3 = JOptionPane.showInputDialog(
"Enter third floating-point value" );
// convert user input to double values
double number1 = Double.parseDouble( s1 );
double number2 = Double.parseDouble( s2 );
double number3 = Double.parseDouble( s3 );
Lines 13-18
User inputs three
Strings
Lines 21-23
Convert Strings to
doubles
to doubles
Line 25
Method init passes
doubles as
arguments to method
Method maximum
init passes
doubles as arguments to
method maximum
double max = maximum( number1, number2, number3 ); // method call
// create JTextArea to display results
JTextArea outputArea = new JTextArea();
// display numbers and maximum value
outputArea.setText( "number1: " + number1 + "\nnumber2: " +
number2 + "\nnumber3: " + number3 + "\nmaximum is: " + max );
 2003 Prentice Hall, Inc.
All rights reserved.
13
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
// get applet's GUI component display area
Container container = getContentPane();
// attach outputArea to Container c
container.add( outputArea );
Outline
Maximum.java
Method maximum returns value
Line 46
from method max of class Math
Method maximum
// maximum method uses Math class method max to help
returns value from
// determine maximum value
method max of class
public double maximum( double x, double y, double z )
Math
{
} // end method init
return Math.max( x, Math.max( y, z ) );
} // end method maximum
} // end class Maximum
 2003 Prentice Hall, Inc.
All rights reserved.
14
6.5
Argument Promotion
• Coercion of arguments
– Forcing arguments to appropriate type to pass to method
• e.g., System.out.println( Math.sqrt( 4 ) );
– Evaluates Math.sqrt( 4 )
– Then evaluates System.out.println()
• Promotion rules
– Specify how to convert types without data loss
 2003 Prentice Hall, Inc. All rights reserved.
15
T yp e
d o u b le
flo at
lo n g
in t
ch ar
sh o rt
by te
b o o lean
V a lid p ro m o tio n s
N one
d o u b le
flo at o r d o u b le
lo n g , flo at o r d ou b le
in t, lo n g , float o r d o u b le
in t, lo n g , float o r d o u b le
sh o rt, int, lo n g , flo at o r d o u b le
N o n e (b o o lean valu es are n o t co nsid ered to be
n u m b ers in Jav a)
F ig . 6 .5 A llo w e d p ro m o tio n s fo r p rim itiv e typ e s .
 2003 Prentice Hall, Inc. All rights reserved.
16
6.6
Java API Packages
• Packages
– Classes grouped into categories of related classes
– Promotes software reuse
– import statements specify classes used in Java programs
• e.g., import javax.swing.JApplet;
 2003 Prentice Hall, Inc. All rights reserved.
17
P a ck a g e
java.applet
D e s c rip tio n
java.awt
T h e Ja va A b stra ct W in do w To o lkit P a ckag e co n tain s th e classes an d interfaces req u ired to create an d m an ip u late
G U Is in Java 1 .0 and 1 .1. In Java 2 , th e S w in g G U I co m p o n en ts o f th e j a v a x . s w i n g p ackag es are o ften u sed
in stead .
java.awt.event
T h e Ja va A b stra ct W in do w To o lkit E ven t P a cka g e con tain s classes an d in terfaces th at en ab le even t han d lin g fo r
G U I co m p o n en ts in bo th th e j a va . a w t an d j a v a x . s w i n g p ackag es.
java.io
T h e Ja va In pu t/O utpu t P a cka g e co n tain s classes th at en ab le p ro gram s to inp u t an d ou tpu t d ata (see C h ap ter 17 ,
F iles an d S tream s).
java.lang
T h e Ja va L an gu ag e P a ckag e co n tain s classes an d in terfaces (d iscu ssed th rou gh ou t th is text) th at are req u ired b y
m an y Jav a p ro gram s. T h is p ackag e is im p o rted b y th e co m p iler in to all p ro gram s.
java.net
T h e Ja va N etw o rkin g P a ckag e con tain s classes th at en ab le p ro gram s to co m m u n icate via n etw o rk s (see
C h ap ter 18 , N etw o rkin g).
java.text
T h e Ja va T ext P a ckag e co n tain s classes an d in terfaces th at en ab le a Java p ro gram to m an ip u l ate n u m b ers, d ates,
ch aracters an d strin gs. T h e p ackage p ro vid es m an y o f Jav a’s in ternatio n alization cap ab ilities th at en ab le a
p ro gram to b e cu sto m ized to a specific lo cale (e.g., an ap p let m ay d isp lay strin gs in d ifferen t lan gu ages, b ased o n
th e u ser’s co un try).
java.util
T h e Ja va U tilities P a cka g e con tain s u tility classes an d in terfaces, su ch as d ate and tim e m an ip u lation s, rand o m n u m b er p ro cessin g cap ab ilities w ith class R a n d o m , sto rin g an d p ro cessin g large am o u n ts o f d ata an d b reakin g
strin gs in to sm a ller p ieces called to ken s w ith class S t r i n g T o k e n i z e r (see C h ap ter 2 0 ; D ata Stru ctu res,
C h ap ter 21 , Java U tilities P ackag e an d B it M an ip u latio n ; an d C h apter 2 2 , C o llectio n s).
javax.swing
T h e Ja va S w ing G U I C o m p on en ts P a cka g e con tain s classes an d interface s fo r Java’s S w in g G U I co m p o n en ts th at
p ro vid e sup po rt fo r p o rtab le G U Is.
javax.swing.event
T h e Ja va S w ing E ven t P a ckag e co n tain s classes an d in terfaces th at en ab le even t h and lin g fo r G U I co m p o n en ts in
p ackag e j a v a x . s w i n g .
F ig . 6 .6
T h e Ja va A p plet P a ckag e con tains th e A p p l e t class an d several in terfaces th at en ab le ap p let/b ro w ser in teraction
an d th e p layin g o f au d io clip s. In Java 2 , class j a v a x . s w i n g . J A p p l e t is u sed to d efin e an ap plet th at u ses th e
S w in g G U I co m p o n en ts.
J a va A P I pa ck a g es (a s ub s et).
 2003 Prentice Hall, Inc. All rights reserved.
18
6.7
Random-Number Generation
• Java random-number generators
– Math.random()
• ( int ) ( Math.random() * 6 )
– Produces integers from 0 - 5
– Use a seed for different random-number sequences
 2003 Prentice Hall, Inc. All rights reserved.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
19
// Fig. 6.7: RandomIntegers.java
// Shifted, scaled random integers.
import javax.swing.JOptionPane;
Outline
RandomIntegers.
java
public class RandomIntegers {
public static void main( String args[] )
{
int value;
String output = "";
Produce integers in range 1-6
// loop 20 times
for ( int counter = 1; counter <= 20; counter++ ) {
// pick random integer between 1 and 6
value = 1 + ( int ) ( Math.random() * 6 );
output += value + "
";
// append value to output
Line 16
Produce integers in
range 1-6
Line 16
Math.random
returns doubles. We
cast the double as an
int
// if counter divisible by 5, append newline toMath.random
String output returns doubles.
if ( counter % 5 == 0 )
We cast the double as an int
output += "\n";
} // end for
 2003 Prentice Hall, Inc.
All rights reserved.
26
27
28
29
30
31
32
33
34
20
JOptionPane.showMessageDialog( null, output,
"20 Random Numbers from 1 to 6",
JOptionPane.INFORMATION_MESSAGE );
System.exit( 0 );
// terminate application
Outline
RandomIntegers.
java
} // end main
} // end class RandomIntegers
 2003 Prentice Hall, Inc.
All rights reserved.
21
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Outline
// Fig. 6.8: RollDie.java
// Roll a six-sided die 6000 times.
import javax.swing.*;
RollDie.java
public class RollDie {
public static void main( String args[] )
{
Produce integers
int frequency1 = 0, frequency2 = 0, frequency3 = 0,
frequency4 = 0, frequency5 = 0, frequency6 = 0, face;
Line 14
in range 1-6Produce integers in
range 1-6
// summarize results
for ( int roll = 1; roll <= 6000; roll++ ) {
face = 1 + ( int ) ( Math.random() * 6 );
// determine roll value and increment appropriate counter
switch ( face ) {
case 1:
++frequency1;
break;
Lines 17-43
Increment appropriate
frequency counter,
depending on
randomly generated
number
Increment appropriate frequency counter,
depending on randomly generated number
case 2:
++frequency2;
break;
case 3:
++frequency3;
break;
 2003 Prentice Hall, Inc.
All rights reserved.
22
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
case 4:
++frequency4;
break;
case 5:
++frequency5;
break;
Outline
RollDie.java
case 6:
++frequency6;
break;
} // end switch
} // end for
JTextArea outputArea = new JTextArea();
outputArea.setText( "Face\tFrequency" + "\n1\t" + frequency1 +
"\n2\t" + frequency2 + "\n3\t" + frequency3 +
"\n4\t" + frequency4 + "\n5\t" + frequency5 +
"\n6\t" + frequency6 );
JOptionPane.showMessageDialog( null, outputArea,
"Rolling a Die 6000 Times", JOptionPane.INFORMATION_MESSAGE );
System.exit( 0 );
// terminate application
} // end main
} // end class RollDie
 2003 Prentice Hall, Inc.
All rights reserved.
23
 2003 Prentice Hall, Inc. All rights reserved.
24
6.8
Example: A Game of Chance
• Craps simulation
– Roll dice first time
• If sum equals 7 or 11, the player wins
• If sum equals 2, 3 or 12, the player loses
• Any other sum (4, 5, 6, 8, 9, 10) is that player’s point
– Keep rolling dice until…
• Sum matches player point
– Player wins
• Sum equals 7
– Player loses
 2003 Prentice Hall, Inc. All rights reserved.
25
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Outline
// Fig. 6.9: Craps.java
// Craps.
import java.awt.*;
import java.awt.event.*;
// Container, FlowLayout
// ActionEvent, ActionListener
import javax.swing.*;
// JApplet, JButton, JLabel, JTextField
public class Craps extends JApplet implements ActionListener {
// constant variables for game status
final int WON = 0, LOST = 1, CONTINUE = 2;
boolean firstRoll = true;
int sumOfDice = 0;
int myPoint = 0;
int gameStatus = CONTINUE;
//
//
//
//
Craps.java
Line 24
Method init starts
JApplet and
initializes GUI
true if first roll of dice
sum of the dice
point if no win or loss on first roll
game not over yet
// graphical user interface components
JLabel die1Label, die2Label, sumLabel, pointLabel;
JTextField die1Field, die2Field, sumField, pointField;
JButton rollButton;
Method init starts JApplet
and initializes GUI (Chapter 12
covers GUI in detail)
// set up GUI components
public void init()
{
// obtain content pane and change its layout to FlowLayout
Container container = getContentPane();
container.setLayout( new FlowLayout() );
 2003 Prentice Hall, Inc.
All rights reserved.
26
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
// create label and text field for die 1
die1Label = new JLabel( "Die 1" );
container.add( die1Label );
die1Field = new JTextField( 10 );
die1Field.setEditable( false );
container.add( die1Field );
// create label and text field for die 2
die2Label = new JLabel( "Die 2" );
container.add( die2Label );
die2Field = new JTextField( 10 );
die2Field.setEditable( false );
container.add( die2Field );
// create label and text field for sum
sumLabel = new JLabel( "Sum is" );
container.add( sumLabel );
sumField = new JTextField( 10 );
sumField.setEditable( false );
container.add( sumField );
// create label and text field for point
pointLabel = new JLabel( "Point is" );
container.add( pointLabel );
pointField = new JTextField( 10 );
pointField.setEditable( false );
container.add( pointField );
Outline
JTextField that
output dice results
JTextField that
output dice results
JTextField that
outputs sum of dice
Craps.java
Lines 33
JTextField that
output dice results
Line 40
JTextField that
output dice results
Line 47
JTextField that
outputs sum of dice
Line 54
JTextField that
outputs player’s point
JTextField that
outputs player’s point
 2003 Prentice Hall, Inc.
All rights reserved.
27
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
// create button user clicks to roll dice
rollButton = new JButton( "Roll Dice" );
rollButton.addActionListener( this );
container.add( rollButton );
Outline
JButton for rolling dice Craps.java
} // end method init
// process one roll of dice
public void actionPerformed( ActionEvent actionEvent )
{
sumOfDice = rollDice(); // roll Method
dice
invoked when
// first roll of dice
if ( firstRoll ) {
Line 59
JButton for rolling
dice
user presses JButton
Line 66
Invoke method rollDice
Method invoked when
user presses
JButton
switch ( sumOfDice ) {
// win on first roll
case 7:
If sum is 7 or 11, user wins
case 11:
gameStatus = WON;
pointField.setText( "" ); // clear point field
break;
// lose on first roll
If user rolls 2, 3 or 12, user loses
case 2:
case 3:
case 12:
gameStatus = LOST;
pointField.setText( "" ); // clear point field
break;
Line 68
Invoke method
rollDice
Lines 76-80
If sum is 7 or 11, user
wins
Lines 83-88
If user rolls 2, 3 or
12, user loses
 2003 Prentice Hall, Inc.
All rights reserved.
28
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
If sum is 4, 5, 6, 8, 9 or
// remember point
sum is the point
default:
gameStatus = CONTINUE;
myPoint = sumOfDice;
pointField.setText( Integer.toString( myPoint ) );
firstRoll = false;
break;
} // end switch
Outline
10, that
Craps.java
Lines 91-96
If sum is 4, 5, 6, 8, 9
or 10, that sum is the
point
} // end if part of if...else
else { // subsequent roll of dice
// determine game status
if ( sumOfDice == myPoint )
gameStatus = WON;
else
if ( sumOfDice == 7 )
gameStatus = LOST;
// win by making point
Lines 105-109
If sum equals point,
user wins; If sum
equals 7, user loses
If sum equals point, user wins;
If sum equals 7, user loses
// lose by rolling 7
} // end else part of if...else
displayMessage();
// display message indicating game status
} // end method actionPerformed
 2003 Prentice Hall, Inc.
All rights reserved.
29
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
// roll dice, calculate sum and
display
results
Method
rollDice
uses Math.random
public int rollDice()
to simulate rolling two dice
{
// pick random die values
int die1 = 1 + ( int ) ( Math.random() * 6 );
int die2 = 1 + ( int ) ( Math.random() * 6 );
int sum = die1 + die2;
// sum die values
// display results in textfields
die1Field.setText( Integer.toString( die1 ) );
die2Field.setText( Integer.toString( die2 ) );
sumField.setText( Integer.toString( sum ) );
return sum;
return dice sum
// return sum of dice
Outline
Craps.java
Lines 121-122
Method rollDice
uses Math.random
to simulate rolling two
dice
Line 131
return dice sum
} // end method rollDice
// determine game status; display appropriate message in status bar
public void displayMessage()
{
// game should continue
if ( gameStatus == CONTINUE )
showStatus( "Roll again." );
 2003 Prentice Hall, Inc.
All rights reserved.
30
142
143
144
145
146
147
148
149
150
151
152
153
154
155
else { // game won or lost
if ( gameStatus == WON )
showStatus( "Player wins. Click Roll Dice to play again." );
else
showStatus( "Player loses. Click Roll Dice to play again." );
firstRoll = true;
Outline
Craps.java
// next roll is first roll of new game
} // end else part of if...else
} // end method displayMessage
} // end class Craps
 2003 Prentice Hall, Inc.
All rights reserved.
31
Outline
Craps.java
 2003 Prentice Hall, Inc.
All rights reserved.
32
6.9 Scope of Declarations
• Scope
– Portion of the program that can reference an entity by its
name
– Basic scope rules
•
•
•
•
Scope of a parameter declaration
Scope of a local-variable declaration
Scope of a label in a labeled break or continue statement
Scope of a local-variable declaration that appears in the
initialization section of a for statement’s header
• Scope of a method or field of a class
 2003 Prentice Hall, Inc. All rights reserved.
33
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Outline
// Fig. 6.10: Scoping.java
// A scoping example.
import java.awt.Container;
import javax.swing.*;
Field x has class scope
Line 11
field x
public class Scoping extends JApplet {
JTextArea outputArea;
// field that is accessible to all methods of this class
int x = 1;
// create applet's GUI
public void init()
{
outputArea = new JTextArea();
Container container = getContentPane();
container.add( outputArea );
} // end method init
Scoping.java
Line 26
Local variable x
Line 28
Method start uses
local variable x
Local variable x has block scope
// method start called after init completes; start calls
// methods useLocal and useField
Method start uses
public void start()
local variable x
{
int x = 5;
// local variable in method start that shadows field x
outputArea.append( "local x in start is " + x );
 2003 Prentice Hall, Inc.
All rights reserved.
34
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
useLocal();
useField();
useLocal();
useField();
//
//
//
//
Outline
useLocal has local x
useInstance uses Scoping's field x
useLocal reinitializes local x
Scoping's field x retains its value
Scoping.java
outputArea.append( "\n\nlocal x in start is " + x );
} // end method start
Re-create
variable
x x during each call
// useLocal creates and initializes
local
variable
public void useLocal()
and initialize it to 25
{
int x = 25; // initialized each time useLocal is called
outputArea.append( "\n\nlocal
" after entering useLocal"
++x;
outputArea.append( "\nlocal x
" before exiting useLocal"
x in useLocal is " + x +
);
in useLocal is " + x +
);
Line 42
Recreate variable x
and initialize it to 25
Lines 40-50
Method useLocal
uses local variable x
Method useLocal
uses local variable x
} // end method useLocal
 2003 Prentice Hall, Inc.
All rights reserved.
35
52
53
54
55
56
57
58
59
60
61
62
63
// useField modifies Scoping's field x during each call
public void useField()
{
outputArea.append( "\n\nfield x is " + x +
" on entering useField" );
x *= 10;
outputArea.append( "\nfield x is " + x +
" on exiting useField" );
} // end method useInstance
Outline
Scoping.java
Lines 53-61
Method useField
Method useField
uses field x
uses field x
} // end class Scoping
 2003 Prentice Hall, Inc.
All rights reserved.
36
6.16 Methods of Class JApplet
• Java API defines several JApplet methods
– Defining methods of Fig. 6.11 in a JApplet is called
overriding those methods.
 2003 Prentice Hall, Inc. All rights reserved.
37
M e th o d
p ub lic vo id
init()
W he n th e m e th o d is c a lle d a n d its p u rp o s e
T his m etho d is called o nce b y the ap p let co ntainer w h e n an a p p let is lo ad ed fo r executio n. It p erfo rm s in itializatio n o f a n
ap p let. T yp ical actio n s p erfo rm ed here are initia lizing fiel d s, creating G U I co m p o ne nts, lo ad ing so und s to p la y, lo ad ing im age s
to d isp lay (see C hap ter 1 9 , M ultim ed ia) and creatin g thread s (see C hap ter 1 6 , M ultithread ing).
p ub lic vo id
start()
T his m etho d is called after the i n i t m e tho d co m p letes e xe cutio n. In a d d itio n, if the b ro w ser user v isits ano ther W eb site and
later returns to the H T M L p ag e o n w hic h the ap p let resid es, m etho d s t a r t is called a gain . T he m etho d p erfo rm s an y tasks
that m u st b e co m p leted w he n the ap p let is lo ad ed fo r the first tim e and that m u st b e p erfo rm ed every tim e the H T M L p age o n
w h ic h the ap p let resid es is re v isited . T yp ical actio n s p erfo rm ed here includ e startin g an a nim atio n (see C hap ter 1 9 ) and
startin g o ther thread s o f exec u tio n (see C hap ter 1 6 ).
p ub lic vo id
paint(
Graphics g )
T his d ra w in g m etho d is called after the i n i t m e tho d co m p letes exec utio n a nd the s t a r t m etho d ha s started . It is also called
every tim e the ap p let need s to b e rep ainted . F o r exam p le, if the u ser co vers the ap p let w ith ano ther o p en w ind o w o n the screen
and later unco vers the ap p let, the p a i n t m etho d is called . T yp ica l actio n s p erfo rm ed here invo lve d ra w in g w ith the
G r a p h i c s o b ject g that is p assed to the p a i n t m e tho d b y the ap p let co ntainer.
p ub lic vo id
stop()
T his m etho d is called w he n th e ap p let sho uld s to p execu tin g — no rm ally, w h en the user o f the b ro w ser lea ves the H T M L p age
o n w hic h the ap p let resid es. T he m etho d p erfo rm s a n y ta sk s that are req uired to susp end th e ap p let’s exec utio n. T yp ical
actio ns p erfo rm ed here are to sto p executio n o f an im a tio n s and thread s.
p ub lic vo id
destroy()
T his m etho d is called w he n th e ap p let is b eing re m o ved fro m m e m o ry — no rm ally, w h e n the u ser o f the b ro w ser exits th e
b ro w sing se ssio n (i.e., clo ses all b ro w ser w ind o w s). T he m e tho d p erfo rm s an y task s that a re req uired to d estro y reso urce s
allo cated to the ap p let.
F ig . 6 .1 1
J A p p l e t m e th o d s th a t th e a p p le t c o n ta in e r c a lls d u rin g a n a p p le t’s e x e c u tio n .
 2003 Prentice Hall, Inc. All rights reserved.
38
6.15 Method Overloading
• Method overloading
– Several methods of the same name
– Different parameter set for each method
• Number of parameters
• Parameter types
 2003 Prentice Hall, Inc. All rights reserved.
39
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Outline
// Fig. 6.12: MethodOverload.java
// Using overloaded methods
import java.awt.Container;
MethodOverload.
java
import javax.swing.*;
public class MethodOverload extends JApplet {
// create GUI and call each square method
public void init()
{
JTextArea outputArea = new JTextArea();
Container container = getContentPane();
container.add( outputArea );
Lines 22-29
Method square
receives an int as an
argument
outputArea.setText( "The square of integer 7 is " + square( 7 ) +
"\nThe square of double 7.5 is " + square( 7.5 ) );
} // end method init
Method square receives an
// square method with int argument
int as an argument
public int square( int intValue )
{
System.out.println( "Called square with int argument: " +
intValue );
return intValue * intValue;
} // end method square with int argument
 2003 Prentice Hall, Inc.
All rights reserved.
40
31
32
33
34
35
36
37
38
39
40
41
// square method with double argument
public double square( double doubleValue )
{
System.out.println( "Called square with double argument: " +
doubleValue );
Outline
MethodOverload.
java
return doubleValue * doubleValue;
} // end method square with double argument
} // end class MethodOverload
Lines 32-39
Overloaded method
square receives a
Overloaded method square
double as an
receives a double as an argument
argument
Called square with int argument: 7
Called square with double argument: 7.5
 2003 Prentice Hall, Inc.
All rights reserved.
41
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Outline
// Fig. 6.13: MethodOverload.java
// Overloaded methods with identical signatures.
import javax.swing.JApplet;
MethodOverload.
java
public class MethodOverload extends JApplet {
// declaration of method square with int argument
Lines 8 and 15
public int square( int x )
{
Compiler cannot distinguish betweenCompiler cannot
return x * x;
methods with identical names and distinguish between
}
parameter sets
// second declaration of method square
// with int argument causes syntax error
public double square( int y )
{
return y * y;
}
methods with identical
names and parameter
sets
} // end class MethodOverload
MethodOverload.java:15: square(int) is already defined in MethodOverload
public double square( int y )
^
1 error
Fig. 6.17 Compiler
error messages
generated from
overloaded methods
with identical
parameter lists and
different return types.
 2003 Prentice Hall, Inc.
All rights reserved.
42
6.12 Recursion
• Recursive method
– Calls itself (directly or indirectly) through another method
– Method knows how to solve only a base case
– Method divides problem
• Base case
• Simpler problem
– Method now divides simpler problem until solvable
– Recursive call
– Recursive step
 2003 Prentice Hall, Inc. All rights reserved.
43
Final value = 120
5!
5!
5! = 5 * 24 = 120 is returned
5 * 4!
5 * 4!
4! = 4 * 6 = 24 is returned
4 * 3!
4 * 3!
3! = 3 * 2 = 6 is returned
3 * 2!
3 * 2!
2! = 2 * 1 = 2 is returned
2 * 1!
2 * 1!
1 returned
1
1
(a) Sequence of recursive calls.
(b) Values returned from each recursive call.
Fig. 6.14 Recursive evaluation of 5!.
 2003 Prentice Hall, Inc. All rights reserved.
44
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Outline
// Fig. 6.15: FactorialTest.java
// Recursive factorial method.
import java.awt.*;
FactorialTest.j
ava
import javax.swing.*;
public class FactorialTest extends JApplet {
JTextArea outputArea;
// create GUI and calculate factorials of 0-10
public void init()
{
outputArea = new JTextArea();
Line 21
Invoke method
factorial
Invoke method factorial
Container container = getContentPane();
container.add( outputArea );
// calculate the factorials of 0 through 10
for ( long counter = 0; counter <= 10; counter++ )
outputArea.append( counter + "! = " +
factorial( counter ) + "\n" );
} // end method init
 2003 Prentice Hall, Inc.
All rights reserved.
45
25
26
27
28
29
30
31
32
33
34
35
36
37
38
// recursive declaration of method factorial
public long factorial( long number )
{
// base case
if ( number <= 1 )
return 1;
// recursive step
else
return number * factorial( number - 1 );
} // end method factorial
} // end class FactorialTest
Outline
Test for base case
(method factorial
can solve base case)
FactorialTest.j
ava
Lines 29-30
Else return simpler Test
problem
that case
for base
method factorial
might solve
(method
factorial
in next recursive
call
can solve base case)
Line 34
Else return simpler
problem that method
factorial might
solve in next recursive
call
 2003 Prentice Hall, Inc.
All rights reserved.
46
6.13 Example Using Recursion: The
Fibonacci Series
• Fibonacci series
– Each number in the series is sum of two previous numbers
• e.g., 0, 1, 1, 2, 3, 5, 8, 13, 21…
fibonacci(0) = 0
fibonacci(1) = 1
fibonacci(n) = fibonacci(n - 1) + fibonacci( n – 1 )
• fibonacci(0) and fibonacci(1) are base cases
– Golden ratio (golden mean)
 2003 Prentice Hall, Inc. All rights reserved.
47
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
// Fig. 6.16: FibonacciTest.java
// Recursive fibonacci method.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
Outline
FibonacciTest.j
ava
public class FibonacciTest extends JApplet implements ActionListener {
JLabel numberLabel, resultLabel;
JTextField numberField, resultField;
// set up applet’s GUI
public void init()
{
// obtain content pane and set its layout to FlowLayout
Container container = getContentPane();
container.setLayout( new FlowLayout() );
// create numberLabel and attach it to content pane
numberLabel = new JLabel( "Enter an integer and press Enter" );
container.add( numberLabel );
// create numberField and attach it to content pane
numberField = new JTextField( 10 );
container.add( numberField );
// register this applet as numberField’s ActionListener
numberField.addActionListener( this );
 2003 Prentice Hall, Inc.
All rights reserved.
48
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
// create resultLabel and attach it to content pane
resultLabel = new JLabel( "Fibonacci value is" );
container.add( resultLabel );
// create numberField, make it uneditable
// and attach it to content pane
resultField = new JTextField( 15 );
resultField.setEditable( false );
container.add( resultField );
} // end method init
// obtain user input and call method fibonacci
public void actionPerformed( ActionEvent event )
{
long number, fibonacciValue;
// obtain user’s input and convert to long
number = Long.parseLong( numberField.getText() );
showStatus( "Calculating ..." );
Outline
FibonacciTest.j
ava
Line 43
Method
actionPerformed
is invoked when user
presses Enter
Method actionPerformed
is
Line 45
invoked when user
Enter
Wepresses
use long,
because Fibonacci
We use long, because
numbers become large
Fibonacci numbers
quickly
become large quickly
Lines 48-53
Pass user input to
method fibonacci
// calculate fibonacci value for number user input
fibonacciValue = fibonacci( number );
Pass user input to method fibonacci
// indicate processing complete and display result
showStatus( "Done." );
resultField.setText( Long.toString( fibonacciValue ) );
} // end method actionPerformed
 2003 Prentice Hall, Inc.
All rights reserved.
49
61
62
63
64
65
66
67
68
69
70
71
72
73
74
// recursive declaration of method fibonacci
public long fibonacci( long n )
{
// base case
if ( n == 0 || n == 1 )
return n;
Outline
Test for base case
(method fibonacci
can solve base case)
// recursive step
else
return fibonacci( n - 1 ) + fibonacci( n - 2 );
} // end method fibonacci
} // end class FibonacciTest
FibonacciTest.j
ava
Else return simpler problem
that
Lines 65-66
method fibonacciTest
might
for solve
base case
in next recursive
call fibonacci
(method
can solve base case)
Lines 69-70
Else return simpler
problem that method
fibonacci might
solve in next recursive
call
 2003 Prentice Hall, Inc.
All rights reserved.
50
Outline
FibonacciTest.j
ava
 2003 Prentice Hall, Inc.
All rights reserved.
51
Outline
FibonacciTest.j
ava
 2003 Prentice Hall, Inc.
All rights reserved.
52
fibonacci( 3 )
return
return
fibonacci( 1 )
return 1
fibonacci( 2 )
+
+
fibonacci( 1 )
fibonacci( 0 )
return 0
Fig. 6.17 Set of recursive calls for fibonacci (3).
 2003 Prentice Hall, Inc. All rights reserved.
return 1
53
6.14 Recursion vs. Iteration
• Iteration
–
–
–
–
Uses repetition structures (for, while or do…while)
Repetition through explicitly use of repetition structure
Terminates when loop-continuation condition fails
Controls repetition by using a counter
• Recursion
–
–
–
–
Uses selection structures (if, if…else or switch)
Repetition through repeated method calls
Terminates when base case is satisfied
Controls repetition by dividing problem into simpler one
 2003 Prentice Hall, Inc. All rights reserved.
54
6.14 Recursion vs. Iteration (cont.)
• Recursion
–
–
–
–
More overhead than iteration
More memory intensive than iteration
Can also be solved iteratively
Often can be implemented with only a few lines of code
 2003 Prentice Hall, Inc. All rights reserved.
55
C h a p te r
6
7
20
F ig . 6.1 8
R e c u rsio n e xa m p le s a nd e xe rc is e s
F acto rial m etho d (Fig. 6 .1 5), F ib on acci m ethod (F ig . 6 .1 6), R aising an in teg er to an
integ er p o w er (E x ercise 6 .3 6), T o w ers o f H ano i (E xercise 6 .37 ), V isu alizing recu rsion
(E x ercise 6 .39 ), G reatest co m m o n d iviso r (E x ercise 6 .40 ), W h at d oes this m etho d
d o?(E x ercise 6 .43 ), Find th e erro r in the recu rsiv e m eth od (E xercise 6 .4 5 )
W h at d oes this p rog ram d o? (E x ercise 7 .16 ), W h at do es th is p ro g ram d o ?
(E x ercise 7 .19 ), D eterm in e w h eth er a string is a p alind ro m e (E x ercis e 7 .32 ), L inear
search (E xercise 7 .33), B in ary search (E xercise 7 .3 4), E igh t Q ueens (E x ercise 7 .35 )
P rin t an array (E x ercise 7 .3 6), P rin t an array b ack w ard (E xercise 7 .37 ), M inim u m v alu e
in an array (E x ercise 7 .38 ), Q uickso rt (E x ercise 7 .3 9), M aze traversal (E x ercise 7 .40 )
B inary-tree in sert (Fig . 20 .17 ), P reo rd er trav ersal o f a b in ary tree (F ig . 20 .17 ), Ino rd er
trav ersal o f a b in ary tree (F ig . 20 .17 ), Po sto rder trav ersal o f a bin ary tree (F ig . 20 .17 ),
P rin t a lin ked list b ack w ard (E x ercise 20 .20 ), S earch a lin ked list (E x ercise 20 .2 1 )
S u m m a ry o f rec u rs io n e xa m p le s a n d exe rc is e s in th is te xt.
 2003 Prentice Hall, Inc. All rights reserved.
56
6.15 (Optional Case Study) Thinking About
Objects: Identifying Class Operations
• Class operations
– Also known as behaviors
– Service the class provides to “clients” (users) of that class
• e.g., radio’s operations
– Setting its station or volume
 2003 Prentice Hall, Inc. All rights reserved.
57
6.15 Thinking About Objects (cont.)
• Deriving class operations
– Use problem statement
• Identify verbs and verb phrases
• Verbs can help determine class operations
 2003 Prentice Hall, Inc. All rights reserved.
58
C la ss
Elevator
V e rb p h ra se s
m oves to other floor, arrives at a floor, resets elevator
button, rings elevator bell, signals its arrival, opens its
door, closes its door
ElevatorShaft
turns off light, turns on light, resets floor button
Person
w alks on floor, presses floor button, presses elevator
button, rides elevator, enters elevator, exits elevator
Floor
[none in the problem statem ent]
FloorButton
requests elevator
E l e v a t o r B u t t o n closes elevator door, signals elevator to m ove to opposite
floor
FloorDoor
signals person to enter elevator (by opening)
ElevatorDoor
signals person to exit elevator (by opening), opens floor
door, closes floor door
Bell
[none in the problem statem ent]
Light
[none in the problem statem ent]
F ig . 6 .1 9
V e rb p h ra se s fo r e a c h cla ss in sim u la to r.
 2003 Prentice Hall, Inc. All rights reserved.
59
6.15 Thinking About Objects (cont.)
• Deriving class operations
– Verbs can help determine class operations
• e.g., verb phrase “resets elevator button”
– Elevator informs ElevatorButton to reset
– ElevatorButton needs method resetButton
• e.g., verb phrase “signal its arrival”
– Elevator informs ElevatorDoor to open
– ElevatorDoor needs method openDoor
 2003 Prentice Hall, Inc. All rights reserved.
60
6.17 Thinking About Objects (cont.)
• Deriving class operations
– Not all verbs determine class operations
• e.g., verb phrase “the elevator arrives at a floor”
– Elevator decides when to arrive
• (after traveling 5 seconds)
– i.e., no object causes Elevator to arrive
– Elevator does not need to provide “arrival” service for
other objects
– arriveElevator is not a valid method (operation)
• We do not include method arriveElevator
 2003 Prentice Hall, Inc. All rights reserved.
61
6.17 Thinking About Objects (cont.)
• Store methods (operations) in UML class diagram
– Place class methods in bottom compartment of that class
 2003 Prentice Hall, Inc. All rights reserved.
62
Person
ElevatorShaft
ID : Integer
moving : Boolean = true
open : Boolean = false
openDoor( )
closeDoor( )
doorOpened( )
Elevator
moving : Boolean = false
summoned : Boolean = false
currentFloor : Integer = 1
destinationFloor : Integer = 2
capacity : Integer = 1
travelTime : Integer = 5
ElevatorDoor
Floor
floorNumber : Integer
capacity : Integer = 1
Light
lightOn : Boolean = false
turnOnLight( )
turnOffLight( )
ElevatorButton
ride( )
requestElevator( )
enterElevator( )
exitElevator( )
departElevator( )
FloorButton
pressed : Boolean = false
resetButton( )
pressButton( )
FloorDoor
pressed : Boolean = false
open : Boolean = false
resetButton( )
pressButton( )
openDoor( )
closeDoor( )
Fig 6.20 Classes with attributes and operations.
 2003 Prentice Hall, Inc. All rights reserved.
Bell
ringBell( )