Download Chapter 7 User-Defined Methods

Document related concepts
no text concepts found
Transcript
Java Programming: From Problem
Analysis to Program Design, 3e
Chapter 7
User-Defined Methods
Chapter Objectives
• Understand how methods are used in Java
programming
• Learn about standard (predefined) methods
and discover how to use them in a program
• Learn about user-defined methods
• Examine value-returning methods,
including actual and formal parameters
Java Programming: From Problem Analysis to Program Design, 3e
2
Chapter Objectives (continued)
• Explore how to construct and use a valuereturning, user-defined method in a program
• Learn how to construct and use user-defined
void methods in a program
• Explore variables as parameters
• Learn about the scope of an identifier
• Become aware of method overloading
Java Programming: From Problem Analysis to Program Design, 3e
3
Predefined Classes
• Methods already written and provided by
Java
• Organized as a collection of classes (class
libraries)
• To use: import package
• Method type: data type of value returned by
method
Java Programming: From Problem Analysis to Program Design, 3e
4
Predefined Classes (continued)
Java Programming: From Problem Analysis to Program Design, 3e
5
Predefined Classes (continued)
Java Programming: From Problem Analysis to Program Design, 3e
6
Predefined Classes (continued)
Java Programming: From Problem Analysis to Program Design, 3e
7
Predefined Classes (continued)
Java Programming: From Problem Analysis to Program Design, 3e
8
class Character
(Package: java.lang)
Java Programming: From Problem Analysis to Program Design, 3e
9
class Character
(Package: java.lang) (continued)
Java Programming: From Problem Analysis to Program Design, 3e
10
class Character
(Package: java.lang) (continued)
Java Programming: From Problem Analysis to Program Design, 3e
11
Syntax: Value-Returning Method
Java Programming: From Problem Analysis to Program Design, 3e
12
User-Defined Methods
• Value-returning methods
– Used in expressions
– Calculate and return a value
– Can save value for later calculation or print value
• modifiers: public, private, protected,
static, abstract, final
• returnType: type of the value that the method
calculates and returns (using return statement)
• methodName: Java identifier; name of method
Java Programming: From Problem Analysis to Program Design, 3e
13
Syntax
• Syntax: Formal Parameter List
-The syntax of the formal parameter list is:
• Method Call
-The syntax to call a value-returning method is:
Java Programming: From Problem Analysis to Program Design, 3e
14
Syntax (continued)
• Syntax: Actual Parameter List
-The syntax of the actual parameter list is:
• Syntax: return Statement
-The return statement has the following syntax:
return expr;
Java Programming: From Problem Analysis to Program Design, 3e
15
Equivalent Method Definitions
public static double larger(double x, double y)
{
double max;
if (x >= y)
max = x;
else
max = y;
return max;
}
Java Programming: From Problem Analysis to Program Design, 3e
16
Equivalent Method Definitions
(continued)
public static double larger(double x, double y)
{
if (x >= y)
return x;
else
return y;
}
Java Programming: From Problem Analysis to Program Design, 3e
17
Equivalent Method Definitions
(continued)
public static double larger(double x, double y)
{
if (x >= y)
return x;
return y;
}
Java Programming: From Problem Analysis to Program Design, 3e
18
Programming Example:
Palindrome Number
• Palindrome: integer or string that reads the
same forwards and backwards
• Input: integer or string
• Output: Boolean message indicating
whether integer string is a palindrome
Java Programming: From Problem Analysis to Program Design, 3e
19
Solution: isPalindrome Method
public static boolean isPalindrome(String str)
{
int len = str.length();
int i, j;
j = len - 1;
for (i = 0; i <= (len - 1) / 2; i++)
{
if (str.charAt(i) != str.charAt(j))
return false;
j--;
}
return true;
}
Java Programming: From Problem Analysis to Program Design, 3e
20
Sample Runs: Palindrome Number
Java Programming: From Problem Analysis to Program Design, 3e
21
Sample Runs: Palindrome Number
(continued)
Java Programming: From Problem Analysis to Program Design, 3e
22
Flow of Execution
• Execution always begins with the first statement
in the method main
• User-defined methods execute only when called
• Call to method transfers control from caller to
called method
• In method call statement, specify only actual
parameters, not data type or method type
• Control goes back to caller when method exits
Java Programming: From Problem Analysis to Program Design, 3e
23
Programming Example: Largest
Number
• Input: set of 10 numbers
• Output: largest of 10 numbers
• Solution
– Get numbers one at a time
– Method largest number: returns the larger of 2
numbers
– For loop: calls method largest number on each number
received and compares to current largest number
Java Programming: From Problem Analysis to Program Design, 3e
24
Solution: Largest Number
static Scanner console = new Scanner(System.in);
public static void main(String[] args)
{
double num;
double max;
int count;
System.out.println("Enter 10 numbers.");
num = console.nextDouble();
max = num;
for (count = 1; count < 10; count++)
{
num = console.nextDouble();
max = larger(max, num);
}
System.out.println("The largest number is "
+ max);
}
Java Programming: From Problem Analysis to Program Design, 3e
25
Sample Run: Largest Number
• Sample Run:
Enter 10 numbers:
10.5 56.34 73.3 42 22 67 88.55 26 62 11
The largest number is 88.55
Java Programming: From Problem Analysis to Program Design, 3e
26
Void Methods
• Similar in structure to value-returning
methods
• Call to method is always stand-alone
statement
• Can use return statement to exit method
early
Java Programming: From Problem Analysis to Program Design, 3e
27
Void Methods: Syntax
• Method Definition
-The general form (syntax) of a void method
without parameters is as follows:
modifier(s) void methodName()
{
statements
}
• Method Call (Within the Class)
-The method call has the following syntax:
methodName();
Java Programming: From Problem Analysis to Program Design, 3e
28
Void Methods with Parameters: Syntax
Java Programming: From Problem Analysis to Program Design, 3e
29
Void Methods with Parameters:
Syntax (continued)
Java Programming: From Problem Analysis to Program Design, 3e
30
Primitive Data Type Variables as
Parameters
• A formal parameter receives a copy of its
corresponding actual parameter
• If a formal parameter is a variable of a
primitive data type:
– Value of actual parameter is directly stored
– Cannot pass information outside the method
– Provides only a one-way link between actual
parameters and formal parameters
Java Programming: From Problem Analysis to Program Design, 3e
31
Reference Variables as Parameters
• If a formal parameter is a reference variable:
– Copies value of corresponding actual parameter
– Value of actual parameter is address of the object
where actual data is stored
– Both formal and actual parameter refer to same
object
Java Programming: From Problem Analysis to Program Design, 3e
32
Uses of Reference Variables as
Parameters
• Can return more than one value from a
method
• Can change the value of the actual object
• When passing address, would save memory
space and time, relative to copying large
amount of data
Java Programming: From Problem Analysis to Program Design, 3e
33
Reference Variables as Parameters:
type String
Java Programming: From Problem Analysis to Program Design, 3e
34
Reference Variables as Parameters:
type String (continued)
Example 7-11
public class Example7_11
{
public static void main(String[] args)
{
int num1;
//Line
IntClass num2 = new IntClass();
//Line
char ch;
StringBuffer str;
//Line 4
num1 = 10;
//Line
num2.setNum(15);
//Line
ch = 'A';
//Line
str = new StringBuffer("Sunny");
//Line
System.out.println("Line 9: Inside main: "
+ "num1 = " + num1
+ ", num2 = "
+ num2.getNum()
+ ", ch = " + ch
+ ", and str = "
+ str);
//Line
Java Programming: From Problem Analysis to Program Design, 3e
1
2
//Line 3
5
6
7
8
9
35
Reference Variables as Parameters:
type String (continued)
funcOne(num1, num2, ch, str);
//Line 10
System.out.println("Line 11: After funcOne: "
+ "num1 = " + num1
+ ", num2 = "
+ num2.getNum()
+ ", ch = " + ch
+ ", and str = "
+ str);
//Line 11
}
Java Programming: From Problem Analysis to Program Design, 3e
36
Reference Variables as Parameters:
type String (continued)
public static void funcOne(int a, IntClass b,
char v,
StringBuffer pStr)
{
int num;
//Line 12
int len;
//Line 13
num = b.getNum();
//Line 14
a++;
//Line 15
b.addToNum(12);
//Line 16
v = 'B';
//Line 17
len = pStr.length();
//Line 18
pStr.delete(0, len);
//Line 19
pStr.append("Warm");
//Line 20
System.out.println("Line 21: Inside funcOne: \n"
+ "
a = " + a
+ ", b = " + b.getNum()
+ ", v = " + v
+ ", pStr = " + pStr
+ ", len = " + len
+ ", and num = " + num); //Line 21
}
}
Java Programming: From Problem Analysis to Program Design, 3e
37
Reference Variables as Parameters:
type String (continued)
Java Programming: From Problem Analysis to Program Design, 3e
38
Reference Variables as Parameters:
type String (continued)
num1 = 10;
num2.setNum(15);
ch = 'A';
str = new StringBuffer("Sunny");
Java Programming: From Problem Analysis to Program Design, 3e
//Line
//Line
//Line
//Line
5
6
7
8
39
Reference Variables as Parameters:
type String (continued)
System.out.println("Line 9: Inside main: "
+ "num1 = " + num1
+ ", num2 = "
+ num2.getNum()
+ ", ch = " + ch
+ ", and str = "
+ str);
//Line 9
Java Programming: From Problem Analysis to Program Design, 3e
40
Reference Variables as Parameters:
type String (continued)
int num;
int len;
num = b.getNum();
Java Programming: From Problem Analysis to Program Design, 3e
//Line 12
//Line 13
//Line 14
41
Reference Variables as Parameters:
type String (continued)
num = b.getNum();
Java Programming: From Problem Analysis to Program Design, 3e
//Line 14
42
Reference Variables as Parameters:
type String (continued)
a++;
Java Programming: From Problem Analysis to Program Design, 3e
//Line 15
43
Reference Variables as Parameters:
type String (continued)
b.addToNum(12);
Java Programming: From Problem Analysis to Program Design, 3e
//Line 16
44
Reference Variables as Parameters:
type String (continued)
v = 'B';
Java Programming: From Problem Analysis to Program Design, 3e
//Line 17
45
Reference Variables as Parameters:
type String (continued)
len = pStr.length();
Java Programming: From Problem Analysis to Program Design, 3e
//Line 18
46
Reference Variables as Parameters:
type String (continued)
pStr.delete(0, len);
Java Programming: From Problem Analysis to Program Design, 3e
//Line 19
47
Reference Variables as Parameters:
type String (continued)
pStr.append("Warm");
Java Programming: From Problem Analysis to Program Design, 3e
//Line 20
48
Reference Variables as Parameters:
type String (continued)
System.out.println("Line 21: Inside funcOne: \n"
+ "
a = " + a
+ ", b = " + b.getNum()
+ ", v = " + v
+ ", pStr = " + pStr
+ ", len = " + len
+ ", and num = " + num); //Line 21
Java Programming: From Problem Analysis to Program Design, 3e
49
Reference Variables as Parameters:
type String (continued)
Java Programming: From Problem Analysis to Program Design, 3e
50
Reference Variables as Parameters:
type String (continued)
System.out.println("Line 11: After funcOne: "
+ "num1 = " + num1
+ ", num2 = "
+ num2.getNum()
+ ", ch = " + ch
+ ", and str = "
+ str);
//Line 11
Java Programming: From Problem Analysis to Program Design, 3e
51
Scope of an Identifier Within a Class
• Local identifier: Identifier declared within a method
or block, which is visible only within that method or
block
• Java does not allow the nesting of methods; you
cannot include the definition of one method in the
body of another method
• Within a method or a block, an identifier must be
declared before it can be used; a block is a set of
statements enclosed within braces
Java Programming: From Problem Analysis to Program Design, 3e
52
Scope of an Identifier Within a
Class (continued)
• A method’s definition can contain several
blocks
– The body of a loop or an if statement also
form a block
• Within a class, outside of every method
definition, (and every block), an identifier
can be declared anywhere
Java Programming: From Problem Analysis to Program Design, 3e
53
Scope of an Identifier Within a
Class (continued)
• Within a method, an identifier used to name
a variable in the outer block of the method
cannot be used to name any other variable
in an inner block of the method
• For example, in the method definition on
the next slide, the second declaration of the
variable x is illegal
Java Programming: From Problem Analysis to Program Design, 3e
54
Scope of an Identifier Within a
Class (continued)
public static void illegalIdentifierDeclaration()
{
int x;
//block
{
double x;
//illegal declaration,
//x is already declared
...
}
}
Java Programming: From Problem Analysis to Program Design, 3e
55
Scope Rules
• Scope rules of an identifier declared within a
class and accessed within a method (block) of
the class
• An identifier, say X, declared within a method
(block) is accessible:
– Only within the block from the point at which it is
declared until the end of the block
– By those blocks that are nested within that block
Java Programming: From Problem Analysis to Program Design, 3e
56
Scope Rules (continued)
• Suppose X is an identifier declared within a class
and outside of every method’s definition (block)
– If X is declared without the reserved word static (such
as a named constant or a method name), then it cannot be
accessed in a static method
– If X is declared with the reserved word static (such as
a named constant or a method name), then it can be
accessed within a method (block), provided the method
(block) does not have any other identifier named X
Java Programming: From Problem Analysis to Program Design, 3e
57
Scope Rules (continued)
Example 7-12
public class ScopeRules
{
static final double rate = 10.50;
static int z;
static double t;
public static void main(String[] args)
{
int num;
double x, z;
char ch;
//...
}
public static void one(int x, char y)
{
//...
}
Java Programming: From Problem Analysis to Program Design, 3e
58
Scope Rules (continued)
public static int w;
public static void two(int one, int z)
{
char ch;
int a;
//block three
{
int x = 12;
//...
} //end block three
//...
}
}
Java Programming: From Problem Analysis to Program Design, 3e
59
Scope Rules: Demonstrated
Java Programming: From Problem Analysis to Program Design, 3e
60
Scope Rules: Demonstrated (continued)
Java Programming: From Problem Analysis to Program Design, 3e
61
Method Overloading:
An Introduction
• Method overloading: more than one method
can have the same name
• Two methods are said to have different
formal parameter lists if both methods have:
– A different number of formal parameters, or
– If the number of formal parameters is the same,
then the data type of the formal parameters, in the
order you list, must differ in at least one position
Java Programming: From Problem Analysis to Program Design, 3e
62
Method Overloading
public
public
public
public
void methodOne(int x)
void methodTwo(int x, double y)
void methodThree(double y, int x)
int methodFour(char ch, int x,
double y)
public int methodFive(char ch, int x,
String name)
• These methods all have different formal
parameter lists
Java Programming: From Problem Analysis to Program Design, 3e
63
Method Overloading (continued)
public void methodSix(int x, double y,
char ch)
public void methodSeven(int one, double u,
char firstCh)
• The methods methodSix and methodSeven
both have three formal parameters and the data type
of the corresponding parameters is the same
• These methods all have the same formal parameter
lists
Java Programming: From Problem Analysis to Program Design, 3e
64
Method Overloading (continued)
• Method overloading: creating several methods,
within a class, with the same name
• The signature of a method consists of the method
name and its formal parameter list
• Two methods have different signatures if they
have either different names or different formal
parameter lists
– Note that the signature of a method does not include
the return type of the method
Java Programming: From Problem Analysis to Program Design, 3e
65
Method Overloading (continued)
• The following method headings correctly
overload the method methodXYZ:
public
public
public
public
void
void
void
void
methodXYZ()
methodXYZ(int x, double y)
methodXYZ(double one, int y)
methodXYZ(int x, double y,
char ch)
Java Programming: From Problem Analysis to Program Design, 3e
66
Method Overloading (continued)
public void methodABC(int x, double y)
public int methodABC(int x, double y)
• Both these method headings have the same name
and same formal parameter list
• These method headings to overload the method
methodABC are incorrect
• In this case, the compiler will generate a syntax
error
– Notice that the return types of these method headings are different
Java Programming: From Problem Analysis to Program Design, 3e
67
Programming Example: Data
Comparison
• Input: data from 2 different files
• Data format: Course Number followed by scores
• Output: Course Number, Group Number, Course
Average
• Solution
– Read from more than one file, write output to file
– Generate bar graphs
– User-defined methods and re-use (calculateAverage and
printResult)
– Parameter passing
Java Programming: From Problem Analysis to Program Design, 3e
68
Programming Example: Data
Comparison (continued)
Sample Output
Course No
CSC
Group No
1
2
Course Average
83.71
80.82
ENG
1
2
82.00
78.20
HIS
1
2
77.69
84.15
MTH
1
2
83.57
84.29
PHY
1
2
83.22
82.60
Avg for group 1: 82.04
Avg for group 2: 82.01
Java Programming: From Problem Analysis to Program Design, 3e
69
Programming Example: Data
Comparison (continued)
Java Programming: From Problem Analysis to Program Design, 3e
70
Chapter Summary
• Predefined methods
• User-defined methods
–
–
–
–
Value-returning methods
Void methods
Formal parameters
Actual parameters
• Flow of Execution
Java Programming: From Problem Analysis to Program Design, 3e
71
Chapter Summary (continued)
• Primitive data type variables as parameters
– One-way link between actual parameters and
formal parameters (limitations caused)
• Reference variables as parameters
– Can pass one or more variables from a method
– Can change value of actual parameter
• Scope of an identifier within a class
• Method overloading
Java Programming: From Problem Analysis to Program Design, 3e
72