Java Method Basics and Examples
Java Method Basics and Examples
Methods
1
Opening Problem
Find the sum of integers from 1 to 10, from 20 to 30, and
from 35 to 45, respectively.
int sum = 0;
for (int i = 1; i <= 10; i++)
sum += i;
[Link]("Sum from 1 to 10 is " + sum);
sum = 0;
for (int i = 20; i <= 30; i++)
sum += i;
[Link]("Sum from 20 to 30 is " + sum);
sum = 0;
for (int i = 35; i <= 45; i++)
sum += i;
[Link]("Sum from 35 to 45 is " + sum);
2
Solution
public static int sum(int i1, int i2) {
int sum = 0;
for (int i = i1; i <= i2; i++)
sum += i;
return sum;
}
4
Method Signature
5
Formal Parameters
6
Actual Parameters
7
Return Value Type
A method may return a value. The returnValueType is the data type
of the value the method returns. If the method does not return a
value, the returnValueType is the keyword void. For example, the
returnValueType in the main method is void.
Define a method Invoke a method
8
Method Abstraction
You can think of the method body as a black box that contains the detailed
implementation for the method.
Method Header
Black Box
Method body
9
Benefits of Methods
10
animation
Trace Method Invocation
i is now 5
public static void main(String[] args) { public static int max(int num1, int num2) {
int i = 5; int result;
int j = 2;
int k = max(i, j); if (num1 > num2)
result = num1;
[Link]( else
"The maximum between " + i + result = num2;
" and " + j + " is " + k);
} return result;
}
11
animation
Trace Method Invocation
j is now 2
public static void main(String[] args) { public static int max(int num1, int num2) {
int i = 5; int result;
int j = 2;
int k = max(i, j); if (num1 > num2)
result = num1;
[Link]( else
"The maximum between " + i + result = num2;
" and " + j + " is " + k);
} return result;
}
12
animation
Trace Method Invocation
invoke max(i, j)
public static void main(String[] args) { public static int max(int num1, int num2) {
int i = 5; int result;
int j = 2;
int k = max(i, j); if (num1 > num2)
result = num1;
[Link]( else
"The maximum between " + i + result = num2;
" and " + j + " is " + k);
} return result;
}
13
animation
Trace Method Invocation
invoke max(i, j)
Pass the value of i to num1
Pass the value of j to num2
public static void main(String[] args) { public static int max(int num1, int num2) {
int i = 5; int result;
int j = 2;
int k = max(i, j); if (num1 > num2)
result = num1;
[Link]( else
"The maximum between " + i + result = num2;
" and " + j + " is " + k);
} return result;
}
14
animation
Trace Method Invocation
declare variable result
public static void main(String[] args) { public static int max(int num1, int num2) {
int i = 5; int result;
int j = 2;
int k = max(i, j); if (num1 > num2)
result = num1;
[Link]( else
"The maximum between " + i + result = num2;
" and " + j + " is " + k);
} return result;
}
15
animation
Trace Method Invocation
(num1 > num2) is true since
num1 is 5 and num2 is 2
public static void main(String[] args) { public static int max(int num1, int num2) {
int i = 5; int result;
int j = 2;
int k = max(i, j); if (num1 > num2)
result = num1;
[Link]( else
"The maximum between " + i + result = num2;
" and " + j + " is " + k);
} return result;
}
16
animation
Trace Method Invocation
result is now 5
public static void main(String[] args) { public static int max(int num1, int num2) {
int i = 5; int result;
int j = 2;
int k = max(i, j); if (num1 > num2)
result = num1;
[Link]( else
"The maximum between " + i + result = num2;
" and " + j + " is " + k);
} return result;
}
17
animation
Trace Method Invocation
return result, which is 5
public static void main(String[] args) { public static int max(int num1, int num2) {
int i = 5; int result;
int j = 2;
int k = max(i, j); if (num1 > num2)
result = num1;
[Link]( else
"The maximum between " + i + result = num2;
" and " + j + " is " + k);
} return result;
}
18
animation
Trace Method Invocation
return max(i, j) and assign the
return value to k
public static void main(String[] args) { public static int max(int num1, int num2) {
int i = 5; int result;
int j = 2;
int k = max(i, j); if (num1 > num2)
result = num1;
[Link]( else
"The maximum between " + i + result = num2;
" and " + j + " is " + k);
} return result;
}
19
animation
Trace Method Invocation
Execute the print statement
public static void main(String[] args) { public static int max(int num1, int num2) {
int i = 5; int result;
int j = 2;
int k = max(i, j); if (num1 > num2)
result = num1;
[Link]( else
"The maximum between " + i + result = num2;
" and " + j + " is " + k);
} return result;
}
20
CAUTION
A return statement is required for a value-returning method. The
method shown below in (a) 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 sign(int n) { public static int sign(int n) {
if (n > 0) Should be if (n > 0)
return 1; return 1;
else if (n == 0) else if (n == 0)
return 0; return 0;
else if (n < 0) else
return –1; return –1;
} }
(a) (b)
22
Call Stacks
Space required for Space required for Space required for Space required for
the main method the main method the main method the main method
k: k: k: k: 5 Stack is empty
j: 2 j: 2 j: 2 j: 2
i: 5 i: 5 i: 5 i: 5
(a) The main (b) The max (c) The max method (d) The max method is (e) The main
method is invoked. method is invoked. is being executed. finished and the return method is finished.
value is sent to k.
23
animation
24
animation
25
animation
26
animation
27
animation
28
animation
Trace Call Stack
29
animation
Trace Call Stack
30
animation
Trace Call Stack
31
animation
Trace Call Stack
32
animation
33
void Method Example
34
Passing Parameters
public static void nPrintln(String message, int n) {
for (int i = 0; i < n; i++)
[Link](message);
}
35
Pass by Value
36
37
Pass by Value, cont.
The main method The swap method The swap method The main method
is invoked is invoked is finished is finished
38
Modularizing Code
Methods can be used to reduce redundant coding and enable code reuse.
Methods can also be used to modularize code and improve the quality of the
program.
39
40
Overloading Methods
• Two methods have the same name but different parameter lists
within one class.
• The Java compiler determines which method is used based on the
method signature.
41
42
Ambiguous Invocation
43
Ambiguous Invocation
public class AmbiguousOverloading {
public static void main(String[] args) {
[Link](max(1, 2));
}
44
Scope of Local Variables
46
Scope of Local Variables, cont.
A variable declared in the initial action part of a for loop
header has its scope in the entire loop. But a variable
declared inside a for loop body has its scope limited in the
loop body from its declaration and to the end of the block
that contains the variable.
47
Scope of Local Variables, cont.
48
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;
}
}
49
Scope of Local Variables, cont.
50
Case Study: Generating Random
Characters
Computer programs process numerical data and
characters. You have seen many examples that involve
numerical data. It is also important to understand
characters and how to process them.
Each character has a unique Unicode between 0 and FFFF
in hexadecimal (65535 in decimal). To generate a random
character is to generate a random integer between 0 and
65535 using the following expression: (note that since 0
<= [Link]() < 1.0, you have to add 1 to 65535.)
(int)([Link]() * (65535 + 1))
51
Case Study: Generating Random
Characters
All numeric operators can be applied to the char operands. The char operand
is cast into a number if the other operand is a number or a character. So, the
preceding expression can be simplified as follows:
'a' + [Link]() * ('z' - 'a' + 1)
52
Case Study: Generating Random
Characters, cont.
53
The RandomCharacter Class
// [Link]: Generate random characters
public class RandomCharacter {
/** Generate a random character between ch1 and ch2 */
public static char getRandomCharacter(char ch1, char ch2) {
return (char)(ch1 + [Link]() * (ch2 - ch1 + 1));
}
/** Generate a random lowercase letter */
public static char getRandomLowerCaseLetter() {
return getRandomCharacter('a', 'z');
}
/** Generate a random uppercase letter */
public static char getRandomUpperCaseLetter() {
return getRandomCharacter('A', 'Z');
}
/** Generate a random digit character */
public static char getRandomDigitCharacter() {
return getRandomCharacter('0', '9');
}
/** Generate a random character */
public static char getRandomCharacter() {
return getRandomCharacter('\u0000', '\uFFFF');
}
}
54
Stepwise Refinement (Optional)
The concept of method abstraction can be applied to the process of
developing programs. When writing a large program, you can use the
“divide and conquer” strategy, also known as stepwise refinement, to
decompose it into subproblems. The subproblems can be further
decomposed into smaller, more manageable problems.
55
PrintCalender Case Study
Let us use the PrintCalendar example to demonstrate the
stepwise refinement approach.
56
Design Diagram
printCalendar
(main)
readInput printMonth
printMonthTitle printMonthBody
getMonthName getStartDay
getTotalNumOfDays
getNumOfDaysInMonth
isLeapYear
57
Design Diagram
printCalendar
(main)
readInput printMonth
printMonthTitle printMonthBody
getMonthName getStartDay
getTotalNumOfDays
getNumOfDaysInMonth
isLeapYear
58
Design Diagram
printCalendar
(main)
readInput printMonth
printMonthTitle printMonthBody
getMonthName getStartDay
getTotalNumOfDays
getNumOfDaysInMonth
isLeapYear
59
Design Diagram
printCalendar
(main)
readInput printMonth
printMonthTitle printMonthBody
getMonthName getStartDay
getTotalNumOfDays
getNumOfDaysInMonth
isLeapYear
60
Design Diagram
printCalendar
(main)
readInput printMonth
printMonthTitle printMonthBody
getMonthName getStartDay
getTotalNumOfDays
getNumOfDaysInMonth
isLeapYear
61
Design Diagram
printCalendar
(main)
readInput printMonth
printMonthTitle printMonthBody
getMonthName getStartDay
getTotalNumOfDays
getNumOfDaysInMonth
isLeapYear
62
Implementation: Top-Down
63
Implementation: Bottom-Up
64
public static String reverse(String s)
{
String reversedString = "";
for(int i=[Link](); i>0; i--) {
reversedString += [Link](i-1);
}
return reversedString;
}
public static boolean isPalindrome(String s) {
// The index of the first character in the string
int low = 0;
// The index of the last character in the string
int high = [Link]() – 1;
67
Practice 2
public class PassByValueExample {
public static void main(String args[]) {
int number = 3;
int number1 = printNext(number);
[Link]("number Inside main(): "+ number1 );
}
public static int printNext(int number){
number++;
[Link]("number Inside printNext():
"+number);
return number;
}
}
68
Practice 3
public class PassByValueExample {
public static void main(String args[]) {
int number = 3;
number = printNext(number);
[Link]("number Inside main(): "+ number);
}
public static int printNext(int number){
number++;
[Link]("number Inside printNext():
"+number);
return number;
}
}
69
Practice 4
public class PassByValueExample {
public static void main(String args[]) {
int number = 3;
number = printNext(number);
[Link]("number Inside main(): "+ number);
}
public static int printNext(int num){
num++;
[Link]("number Inside printNext():
"+number);
return number;
}
}
70
Practice 5
public class PassByValueExample {
71
Practice 6
public class PassByValueExample {
72
Practice 7-10
Practice 7: Write a method that can generate an even random
number between 50 to 500 inclusively
73
Practice Answer
74
Practice Answer 7
public static int myRand(){
int x;
x = (int)(50 + [Link]()*(500-50+1));
x = (x%2==0)? x : x-1;
return x;
}
75
Practice Answer 8
76
Practice Answer 9, 10
9. (int) [Link](x+0.5)
10. (int)(a+1+ [Link]()*(b-a))
77