A method is a collection of statements that are grouped together to perform an operation.
• Method signature is the combination of the method name and the parameter list.
• The variables defined in the method header are known as formal parameters.
• When a method is invoked, you pass a value to the parameter. This value is referred to as actual parameter or argument.
•
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.
Calling Methods

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
sign(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.
Reuse Methods from Other Classes
NOTE: One of the
benefits of methods is for reuse. The max method can be invoked from any
class besides TestMax. If you create a new
class Test, you can invoke the max method using ClassName.methodName (e.g., TestMax.max).
Call Stacks

Passing Parameters
public static void nPrintln(String
message, int n) {
for (int i = 0; i < n; i++)
System.out.println(message);
}
Suppose you invoke
the method using
nPrintln(“Welcome to
Java”, 5);
What is the output?
Suppose you invoke
the method using
nPrintln(“Computer Science”,
15);
What is the output?
Pass by Value

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.
Case Study: Computing
Taxes with Methods
Listing 3.1, “Computing Taxes,” uses if statements to check the filing status and computes the tax based on the filing status. Simplify Listing 3.1 using methods. Each filing status has six brackets.
The code for computing taxes is nearly same for each filing status except that each filing status has different bracket ranges. For example, the single filer status has six brackets [0, 6000], (6000, 27950], (27950, 67700], (67700, 141250], (141250, 307050], (307050, ¥), and the married file jointly status has six brackets [0, 12000], (12000, 46700], (46700, 112850], (112850, 171950], (171950, 307050], (307050, ¥).
The
first bracket of each filing status is taxed at 10%, the second 15%, the third
27%, the fourth 30%, the fifth 35%, and the sixth 38.6%. So you can write a
method with the brackets as arguments to compute the tax for the filing status.
The signature of the method is:
For example, you can invoke computeTax(400000, 6000, 27950, 67700, 141250, 307050) to compute the tax for single filers with $400,000 of taxable income:
import javax.swing.JOptionPane;
public class ComputeTaxWithMethod {
public static void main(String[] args) {
// Prompt the user to enter filing status
String statusString = JOptionPane.showInputDialog("Enter the filing status:");
int status = Integer.parseInt(statusString);
// Prompt the user to enter taxable income
String incomeString = JOptionPane.showInputDialog("Enter the taxable income:");
double income = Double.parseDouble(incomeString);
// Display the result
JOptionPane.showMessageDialog(null, "Tax is " +
(int)(computeTax1(status, income) * 100) / 100.0);
} public static double computeTax2(double income,
int r1, int r2, int r3, int r4, int r5) {
double tax = 0;
if (income <= r1)
tax = income * 0.10;
else if (income <= r2)
tax = r1 * 0.10 + (income - r1) * 0.15;
else if (income <= r3)
tax = r1 * 0.10 + (r2 - r1) * 0.15 + (income - r2) * 0.27;
else if (income <= r4)
tax = r1 * 0.10 + (r2 - r1) * 0.15 +
(r3 - r2) * 0.27 + (income - r3) * 0.30;
else if (income <= r5)
tax = r1 * 0.10 + (r2 - r1) * 0.15 + (r3 - r2) * 0.27 +
(r4 - r3) * 0.30 + (income - r4) * 0.35;
else
tax = r1 * 0.10 + (r2 - r1) * 0.15 + (r3 - r2) * 0.27 +
(r4 - r3) * 0.30 + (r5 - r4) * 0.35 + (income - r5) * 0.386;
return tax;
} public static double computeTax1(int status, double income) {
switch (status) {
case 0: return
computeTax2(income, 6000, 27950, 67700, 141250, 307050);
case 1: return
computeTax2(income, 12000, 46700, 112850, 171950, 307050);
case 2: return
computeTax2(income, 6000, 23350, 56425, 85975, 153525);
case 3: return
computeTax2(income, 10000, 37450, 96700, 156600, 307050);
default: return 0;
} }}
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 can be used.
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 variabl

More on scope

// 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;
}
}
// With an error
public static void incorrectMethod() {
int x = 1;
int y = 1;
for (int i = 1; i < 10; i++) {
int x = 0;
x += i;
}
}
Benefits of Methods
• Write a method once and reuse it anywhere.
• 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)
Examples:
Math.sin(0) returns 0.0
Math.sin(Math.PI / 6) returns 0.5
Math.sin(Math.PI / 2) returns 1.0
Math.cos(0) returns 1.0
Math.cos(Math.PI / 6) returns 0.866
Math.cos(Math.PI / 2) returns 0
Exponent Methods
exp(double a)
Returns e raised to the power of a.
log(double a)
Returns the natural logarithm of a.
log10(double a)
Returns the 10-based 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.
Examples:
Math.exp(1) returns 2.71
Math.log(2.71) returns 1.0
Math.pow(2, 3) returns 8.0
Math.pow(3, 2) returns 9.0
Math.pow(3.5, 2.5) returns 22.91765
Math.sqrt(4) returns 2.0
Math.sqrt(10.5) returns 3.24
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).
Rounding Methods Examples:
Math.ceil(2.1) returns 3.0
Math.ceil(2.0) returns 2.0
Math.ceil(-2.0) returns –2.0
Math.ceil(-2.1) returns -2.0
Math.floor(2.1) returns 2.0
Math.floor(2.0) returns 2.0
Math.floor(-2.0) returns –2.0
Math.floor(-2.1) returns -3.0
Math.rint(2.1) returns 2.0
Math.rint(2.0) returns 2.0
Math.rint(-2.0) returns –2.0
Math.rint(-2.1) returns -2.0
Math.rint(2.5) returns 2.0
Math.rint(-2.5) returns -2.0
Math.round(2.6f) returns 3
Math.round(2.0) returns 2
Math.round(-2.0f) returns -2
Math.round(-2.6) returns -3
min, max, and abs
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).
Examples:
Math.max(2, 3) returns 3
Math.max(2.5, 3) returns 3.0
Math.min(2.5, 3.6) returns 2.5
Math.abs(-2) returns 2
Math.abs(-2.1) returns 2.1
The random Method
Generates a random double value greater than or equal to 0.0 and less than 1.0 (0 <= Math.random() < 1.0).
Examples:
In general:
![]()