Tải bản đầy đủ (.pdf) (27 trang)

Bài giảng Kỹ thuật lập trình Java - Chương 7: Phương thức

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.22 MB, 27 trang )

Chương 7
Phương Thức


Chương 7: Phương thức
o Giới thiệu phương thức.
o Định nghĩa chồng phương thức.
o Lớp Math.
o Chia để trị và đệ quy.


Định nghĩa
o Một phương thức là một tập các câu lệnh được
nhóm lại với nhau nhằm thực hiện một cơng
việc cụ thể nào đó.
o Ví dụ:

 Tính giai thừa.
 Tính diện tích hình chữ nhật.
 Giải phương trình.


Khai báo phương thức
[public/private/…] [static] <kiểu trả về> phương thức> <(Danh sách tham số)>
{
// các câu lệnh.
}


Cấu trúc phương thức


Kiểu trả về

Danh sách tham số

public static long giaiThua(int n) {
long ketQua = 1;
Thân
if (n==1)
phương
thức
ketQua = 1;
else
ketQua = giaiThua(n-1)*n;
return ketQua;
}

Tên phương thức

Kết quả trả về


Cấu trúc phương thức
Phương thức có thể trả về một giá trị. Kiểu của giá trị
trả về đó là kiểu của phương thức trả về.
• Ví dụ: public static float DienTich(float banKinh)

Phương thức khơng có giá trị trả về → chúng ta dùng
từ khóa void.
• Ví dụ: Kiểu giá trị trả về trong phương thức main là
void.



Cấu trúc phương thức
Tham số khai báo trong danh sách tham số được gọi là
tham số hình thức (formal parameters)
Khi phương thức được gọi, tham số hình thức được thay
thế bởi các biến hoặc dữ liệu, được gọi là tham số thực sự
(actual parameters).
Lệnh return có thể xuất hiện ở nhiều nơi trong phương
thức và là lệnh cuối cùng thực hiện trong phương thức.
Lệnh trả về giá trị là bắt buộc phải có đối với phương thức
có khai báo kiểu trả về khác void


Ví dụ
//Khai báo và gọi phương thức
public class TestMax{
public static void main(String[] args){
int i = 5, j = 2;
int k = max (i, j);
System.out.println(“Max cua “ +i+ “ va “ +j+ “ là “ + k);
}
// Tim Max cua hai so
public static int max(int so1, int so2) {
int result;
result = so1 > so2 ? so1 : so2;
return result;
}
}



Ví dụ
//Khai báo và gọi phương thức
class Message{
public static void main(String[] args) {
String str = "Hello";
int n = 9;
nPrintln(str, n); //Goi phuong thuc
System.out.println("Goodbye.");
}
public static void nPrintln(String message, int n) {
for (int i = 1; i <= n; i++)
System.out.println(i + ": " + message);
}
}


Chồng phương thức
o Chồng phương thức là khai báo nhiều phương
thức có cùng tên nhưng có số và/hoặc kiểu tham
số khác nhau.
o Ví dụ: Chồng phương thức max
public static double max(double num1, double
num2){
if (num1 > num2)
return num1;
else
return num2;
}



Chồng phương thức
public class TimSoLonNhat {
public static void main(String[] args){
int i = 5, j = 2;
double a =8, b =10;
int k = max (i, j);
System.out.println("Max cua " +i+ "
va " +j+ " là " + k);
double h = max(a,b);
System.out.println("Max cua " +a+
" va " +b+ " là " + h);
}
public static int max(int so1, int so2) {
int result;
result = so1 > so2 ? so1 : so2;
return result;
}

public static double
max(double num1, double
num2){
if (num1 > num2)
return num1;
else
return num2;
}
}



Lợi ích của phương thức

Viết một lần, dùng nhiều lần.
Giấu thông tin. Giấu sự thực hiện đối với
user.
Giảm độ phức tạp.


Lớp java.lang.Math
o Các hằng lớp:
 PI
E
o Các phương thức lớp:
 Các phương thức lượng giác
 Các phương thức số mũ
 Các phương thức làm tròn
 Các phương thức min, max, abs, và random


Các phương thức lượng giác
o
o
o
o

sin(double rad)
cos(double rad)
tan(double rad)
acos(double rad)


Phương thức
o Math.sin(0)
o Math.sin(Math.PI/6)
o Math.cos(0)
o Math.cos(Math.PI/6)

o
o
o
o

asin(double rad)
atan(double rad)
toRadians(double deg)
toDegrees(double rad)

Giá trị trả về
-> 0.0
-> 0.5
-> 1.0
-> 0.866


Các phương thức số mũ
Phương thức
o exp (double a)
o log (double a)
o pow (double a,double b)
o sqrt (double a)


Giá trị trả về
o ea
o ln(a)
o ab
o Căn bậc 2 của a


Ví dụ
public class LopMath {
public static void main(String[] args) {
double tinhsin;
tinhsin = Math.sin(0);
System.out.println("sin cua 0 = "+tinhsin);
System.out.println("kết quả = " + Math.sin(Math.PI/6));
int a = 4, b=5;
System.out.println(a + " mũ "+ b + " = "+Math.pow(a,b));
int c = 9;
System.out.println("Căn bậc 2 của "+c + " =
"+Math.sqrt(c));
}
}


Các phương thức làm trịn
double ceil(double x)

• Làm trịn lên giá trị nguyên gần nhất
→ giá trị thực

double floor(double x)


• làm tròn xuống giá trị nguyên gần
nhất → giá trị thực

double rint(double x)

int round(float x)

long round(double x)

• làm trịn đến giá trị nguyên gần nhất.
Nếu phần lẻ của x bằng 0.5 → làm
trịn xuống
• Trả về (int) Math.floor(x+0.5)

• Trả về (long) Math.floor(x+0.5)


Ví dụ
o
o
o
o
o
o
o
o
o
o


Math.ceil(2.1)
Math.ceil(-2.1)
Math.floor(2.1)
Math.floor(-2.1)
Math.rint(2.1)
Math.rint(-2.1)
Math.rint(2.5)
Math.round(2.6f)
Math.round(-2.6)
Math.round(2.0)

-> 3.0
-> -2.0
-> 2.0
-> -3.0
-> 2.0
-> -2.0
-> 2.0
-> 3 (giá trị int)
-> -3 (giá trị long)
-> 2 (giá trị long)


Ví dụ
max(a, b) và min(a, b)
o Trả về giá trị lớn nhất và nhỏ nhất của a, b
o VD:
Math.max(2, 3) = 3
Math.min(2.5, 3) = 2.5
abs(a)

o Trả về giá trị tuyệt đối của a
o Math.abs(-2.4) = 2.4
random()
o Trả về một giá trị double ngẫu nhiên trong khoảng [0.0; 1.0)
o VD:
10+(int)(Math.random()*20) ⇒ Số nguyên thuộc [10; 30)
10 + (Math.random()*20) ⇒ Số thực thuộc [10.0; 30.0)


min, max, abs, random
public class LopMath {
public static void main(String[] args) {
int a, b, solon, sonho;
a = -8;
b = 10;
solon = Math.max(a,b);
System.out.println("Số lớn nhất = "+solon);
System.out.println("Số lớn nhất = "+Math.min(a, b));
System.out.println("Giá trị tuyệt đối của "+a+" = " +
Math.abs(a));
c = Math.random();
System.out.println("Giá trị c trong khoảng 0 đến 1.0 là " + c);
}
}


Đệ quy
Đệ quy là một kỹ thuật giải một bài tốn
Chia một bài tồn thành các bài tốn tương tự nhưng có kích
thước nhỏ hơn

Tiếp tục chia cho đến khi gặp trường hợp cơ sở (base case) mà
lời giải cho các bài toán này là rõ ràng
Sử dụng lời giải đó để giải các bài tốn lớn hơn trước đó
Tiếp tục cho đến khi bài toán gốc được giải


Bài tốn
Một phương thức chứa một lời gọi đến chính nó là
một phương thức đệ quy

Một bài tốn đệ quy có thể được giải bằng cách
dùng vịng lặp và ngược lại
Ví dụ: Một số bài tốn đệ quy điển hình
• Tính giai thừa
• Tìm số fibonacci thứ n
• Tháp Hà Nội


Ví dụ Phương thức đệ quy countDown()
o In ra số nguyên theo thứ tự giảm dần
public static void countDown(int integer) {
System.out.println(integer);
if (integer > 1)
countDown(integer - 1);
} // end countDown


Hoạt động Phương thức đệ quy countDown()



Hoạt động Phương thức đệ quy countDown()


×