Chapter 4 Methods

Download Report

Transcript Chapter 4 Methods

Chapter 4 Methods

Introducing Methods
– Benefits of methods, Declaring Methods, and Calling Methods

Passing Parameters
– Pass by Value

Overloading Methods
– Ambiguous Invocation

Scope of Local Variables

Method Abstraction

The Math Class

Case Studies

Recursion (Optional)
Introducing Methods
A method is a
collection of
statements that are
grouped together
to perform an
operation.
Method Structure
modifier
methodName
returnValueType
method
heading
parameters
public static int max(int num1, int num2) {
int result = 0;
method
body
if (num1 > num2)
result = num1;
else
result = num2;
return result;
}
return value
Introducing Methods, cont.
•parameter profile refers to the
type, order, and number of the
parameters of a method.
•method signature is the
combination of the method name and
the parameter profiles.
•The parameters defined in the
method header are known as formal
parameters.
•When a method is invoked, its
Declaring Methods
public static int max(int num1,
int num2) {
if (num1 > num2)
return num1;
else
return num2;
}
Calling Methods
Example 4.1 Testing the max method
This program demonstrates calling a method
max to return the largest of the int values
TestMax
Run
Calling Methods, cont.
pass i
pass j
public static void main(String[] args) {
int i = 5;
int j = 2;
int k = max(i, j);
public static int max(int num1, int num2) {
int result;
if (num1 > num2)
result = num1;
else
result = num2;
System.out.println(
"The maximum between " + i +
" and " + j + " is " + k);
}
return result;
}
Calling Methods, cont.
The main method
i:
5
pass 5
pass 2
The max method
num1:
5
parameters
j:
2
num2:
2
k:
5
result:
5
CAUTION
A return statement is required for a nonvoid
method. The following method is logically
correct, but it has a compilation error, because the
Java compiler thinks it possible that this method
does not return any value.
public static int xMethod(int n) {
if (n>0) return 1;
else if (n==0) return 0;
else if (n<0) return –1;
}
To fix this problem, delete if (n<0) in the code.
Passing Parameters
public static void nPrintln(String message,
int n) {
for (int i = 0; i < n; i++)
System.out.println(message);
}
Pass by Value
Example 4.2 Testing Pass by value
This program demonstrates passing values
to the methods.
TestPassByValue
Run
Pass by Value, cont.
Invoke swap
swap(num1, num2)
num1
1
num2
2
n1
1
n2
2
The values of num1 and
num2 are passed to n1 and
n2. Executing swap does not
affect num1 and num2.
Pass by value
swap( n1,
n2)
Execute swap inside the swap body
Swap
n1
2
n2
1
temp
1
Overloading Methods
Example 4.3 Overloading the max Method
public static double max(double num1, double
num2) {
if (num1 > num2)
return num1;
else
return num2;
}
TestMethodOverloading
Run
Ambiguous Invocation
Sometimes there may be two or more
possible matches for an invocation of a
method, but the compiler cannot determine
the most specific match. This is referred to
as ambiguous invocation. Ambiguous
invocation is a compilation error.
Ambiguous Invocation
public class AmbiguousOverloading {
public static void main(String[] args) {
System.out.println(max(1, 2));
}
public static double max(int num1,
double num2) {
if (num1 > num2)
return num1;
else
return num2;
}
public static double max(double num1,
int num2) {
if (num1 > num2)
return num1;
else
return num2;
}
Scope of Local Variables
A local variable: a variable defined inside a
method.
Scope: the part of the program where the
variable can be referenced.
The scope of a local variable
starts from its declaration
and continues to the end of
the block that contains the
variable. A local variable
must be declared before it
Scope of Local Variables, cont.
You can declare a local
variable with the same name
multiple times in different
non-nesting blocks in a
method, but you cannot
declare a local variable
twice in nested blocks. Thus,
the following code is
correct.
Scope of Local Variables, cont.
// Fine with no errors
public static void
correctMethod() {
int x = 1;
int y = 1;
// i is declared
for (int i = 1; i < 10; i++) {
x += i;
}
// i is declared again
for (int i = 1; i < 10; i++) {
y += i;
}
Scope of Local Variables, cont.
// With no errors
public static void incorrectMethod() {
int x = 1;
int y = 1;
for (int i = 1; i < 10; i++) {
int x = 0;
x += i;
}
}
Method Abstraction
You can think of the method body as a black
box that contains the detailed
implementation for the method.
Optional return
value
Optional Input
Method Signature
Method body
Black Box
Benefits of Methods
• Write once and reuse it any times.
• Information hiding. Hide the implementation
from the user.
• Reduce complexity.
The Math Class
 Class
constants:
– PI
–E
 Class
methods:
– Trigonometric Methods
– Exponent Methods
– Rounding Methods
– min, max, abs, and random Methods
Trigonometric Methods
 sin(double
a)
 cos(double
a)
 tan(double
a)
 acos(double
a)
 asin(double
a)
 atan(double
a)
Exponent Methods

exp(double a)
Returns e raised to the power of a.

log(double a)
Returns the natural logarithm of a.

pow(double a, double b)
Returns a raised to the power of b.

sqrt(double a)
Returns the square root of a.
Rounding Methods

double ceil(double x)
x rounded up to its nearest integer. This
integer is returned as a double value.

double floor(double x)
x is rounded down to its nearest integer. This
integer is returned as a double value.

double rint(double x)
x is rounded to its nearest integer. If x is
equally close to two integers, the even one is
returned as a double.

int round(float x)
Return (int)Math.floor(x+0.5).

long round(double x)
Return (long)Math.floor(x+0.5).
min, max, abs, and random
 max(a,
b)and min(a, b)
Returns the maximum or minimum of two
parameters.
 abs(a)
Returns the absolute value of the parameter.
 random()
Returns a random double value
in the range [0.0, 1.0).
Example 4.4 Computing Mean
and Standard Deviation
Generate 10 random numbers and compute the
mean and standard deviation
n
m ean 
 xi
n
n
i 1
n
deviation
ComputeMeanDeviation
x
i 1
2
i

(  xi ) 2
i 1
n
n 1
Run
Example 4.5 Obtaining Random
Characters
Write the methods for generating random
characters. The program uses these methods to
generate 175 random characters between ‘!' and ‘~'
and displays 25 characters per line. To find out the
characters between ‘!' and ‘~', see Appendix B,
“The ASCII Character Set.”
RandomCharacter
Run
Example 4.5 Obtaining Random
Characters, cont.
Appendix B: ASCII Character Set
Case Studies
Example 4.6 Displaying Calendars
The program reads in the month and year
and displays the calendar for a given month
of the year.
PrintCalendar
Run
Design Diagram
printCalendar
(main)
printMonth
readInput
getStartDay
printMonthTitle
getTotalNumOfDays
getMonthName
getNumOfDaysInMonth
isLeapYear
printMonthBody
Recursion (Optional)
Example 4.7 Computing Factorial
factorial(0) = 1;
factorial(n) = n*factorial(n-1);
ComputeFactorial
Run
Example 4.7 Computing
Factorial, cont.
main method:
factorial(4)
Step 9: factorial(4) returns 24 (4*6)
factorial(4) is called in the main
factorial(4) = 4*factorial(3)
Step 8: factorial(3) returns 6 (3*2)
Step 1: factorial(4) calls factorial(3)
factorial(3) = 3*factorial(2)
Step 7: factorial(1) returns 2 (2*1)
Step 2: factorial(3) calls factorial(2)
factorial(2) = 2*factorial(1)
Step 6: factorial(1) returns 1 (1*1)
Step 3: factorial(2) calls factorial(1)
factorial(1) = 1*factorial(0)
Step 5: factorial(0) returns 1
Step 4: factorial(1) calls factorial(0)
factorial(0) = 1
Example 4.7 Computing
Factorial, cont.
Required
5 Space
for factorial(0)
Required
1 Space
for factorial(4)
Required
4 Space
for factorial(1)
Space Required
for factorial(1)
Required
3 Space
for factorial(2)
Space Required
for factorial(2)
Space Required
for factorial(2)
Required
2 Space
for factorial(3)
Space Required
for factorial(3)
Space Required
for factorial(3)
Space Required
for factorial(3)
Space Required
for factorial(4)
Space Required
for factorial(4)
Space Required
for factorial(4)
Space Required
for factorial(4)
Required
6 Space
for factorial(1)
Space Required
for factorial(2)
Required
7 Space
for factorial(2)
Space Required
for factorial(3)
Space Required
for factorial(3)
Required
8 Space
for factorial(3)
Space Required
for factorial(4)
Space Required
for factorial(4)
Space Required
for factorial(4)
Required
9 Space
for factorial(4)
Fibonacci Numbers
Example 4.8 Computing Finonacci Numbers
0 1 1 2 3 5 8 13 21 34 55 89…
f0 f1
fib(2) = fib(0) + fib(1);
fib(0) = 0;
fib(1) = 1;
fib(n) = fib(n-2) + fib(n-1); n>=2
Fibonacci Numbers, cont
ComputeFibonacci
Run
Fibonnaci Numbers, cont.
1
fib(4)=
fib(3) + fib(2)
call fib(3)
return fib(3)
2
call fib(2)
fib(3)=
fib(2) + fib(1)
7
return fib(2)
3
fib(2)=
fib(1) + fib(0)
return fib(1)
4
fib(1)=
1
return fib(1)
6
call fib(1)
5
fib(0)=
0
fib(2)=
fib(1) + fib(0)
fib(1)=
1
8
fib(1)=
1
9
fib(0)=
1
Towers of Hanoi
Example 4.9 Solving the Towers of Hanoi
Problem
Solve the towers of Hanoi problem.
TowersOfHanoi
Run
Towers of Hanoi, cont.
A
B
C
A
Step 0: Starting status
A
B
B
C
A
B
Step 3: Move disk 1 from B to C
B
C
Step 5: Move disk 1 from C to A
C
A
Step 2: Move disk 2 from A to C
A
C
Step 4: Move disk 3 from A to B
Step 1: Move disk 1 from A to B
A
B
B
C
Step 6: Move disk 2 from C to B
C
A
B
Step 7: Mve disk 1 from A to B
C