Mục tiêu • Nắm được các kỹ thuật xử lý cơ bản của ngôn ngữ java như: nhập, xuất dữ liệu, xử lý mảng, cơ chế bộ nhớYêu cầu... • Giới thiệu các trúc điều khiển trong lập trình: lệnh rẽ nhá
Trang 1VIỆN ĐẠI HỌC MỞ HÀ NỘI
HA NOI OPEN UNIVERSITY
Chương 2
CÁC KỸ THUẬT CƠ BẢN TRONG JAVA
Trang 2Mục tiêu và yêu cầu
• Cung cấp các khái niệm, phương pháp cơ bản của ngôn
ngữ java
Mục tiêu
• Nắm được các kỹ thuật xử lý cơ bản của ngôn ngữ java
như: nhập, xuất dữ liệu, xử lý mảng, cơ chế bộ nhớYêu cầu
Trang 3Tài liệu tham khảo
Chương 2: Giáo trình Kỹ thuật lập trình hướng đối tượng –Khoa CNTT – Viện Đại học Mở Hà Nội
Các thành phần cơ bản - Lập trình Hướng đối tượng vớiJava, Đoàn Văn Ban, NXB Khoa học kỹ thuật, 2003
Trang 4Nội dung bài học
• Các thành phần cơ bản trong ngôn ngữ Java: kiểu dữ liệu, biến,hằng, toán tử, biểu thức, câu lệnh, khối lệnh,
• Giới thiệu các trúc điều khiển trong lập trình: lệnh rẽ nhánh (if switch), lệnh lặp (for – do – while)
-• Kỹ thuật vào – ra dữ liệu
• Kỹ thuật xử lý dữ liệu kiểu mảng, ngày tháng, xâu ký tự, sốngẫu nhiên, sử dụng các hàm tính toán (Math), chuyển đổi kiểu
dữ liệu
Khái niệm
Trang 52.1 Các thành phần cơ bản
Java có 2 nhóm kiểu dữ liệu: cơ sở và mở rộng
- Kiểu dữ liệu cơ sở:
Kiểu dữ liệu
Trang 62.1 Các thành phần cơ bản (tiếp)
• Là đại lượng có giá trị có thể thay đổi trong chương trình
• Tên biến: Không chứa dấu cách, ký tự bắt đầu là chữ cái, dấugạch dưới hoặc dấu $
• Có thể khai báo ở các vị trí tùy ý trong chương trình
• Không được trùng với các từ khóa
Biến
Trang 72.1 Các thành phần cơ bản (tiếp)
• Là đại lượng có giá trị không đổi trong chương trình
• Tên hằng: giống với biến
Trang 8so sánh <, <=, >, >=, ==, !=, instanceof
Trang 102.2 Các cấu trúc điều khiển
• Được sử dụng khi ta muốn chương trình thực hiện một hoặc mộtnhóm lệnh nào đó thỏa mãn từng điều kiện cụ thể
Trang 112.2 Các cấu trúc điều khiển (tiếp)
Kiểm tra và thông báo tam giác ABC có phải là tam giác vuônghay không?
public class Example01 {
public static void main(String str[]){
Ví dụ 1 (if else):
Trang 122.2 Các cấu trúc điều khiển (tiếp)
• Trong trường hợp muốn chương trình thực hiện một hoặc mộtnhóm lệnh nào đó trong nhiều nhóm lệnh khác nhau (dựa trên cácđiều kiện cụ thể)
Trang 132.2 Các cấu trúc điều khiển (tiếp)
Hiện thị từ tiếng anh ứng với một giá trị số nguyên
public class Example02 {
public static void main(String str[]){
int so=3;
switch(so){
case 1: System.out.println(so+"-One"); break;
case 2: System.out.println(so+"-Two"); break;
case 3: System.out.println(so+"-Three"); break;
default: System.out.println("Chưa học"); break;
} }
Ví dụ 2 (switch case):
Trang 142.2 Các cấu trúc điều khiển (tiếp)
• Được sử dụng khi ta muốn chương trình thực hiện một lệnhhoặc một nhóm lệnh nào đó nhiều lần
Các lệnh lặp
Trang 152.2 Các cấu trúc điều khiển (tiếp)
• Cú pháp:
for ( nhóm_lệnh_1 ; điều_kiện ; nhóm_lệnh_2 ){ nhóm_lệnh_lặp;
}Máy thực hiện:
- b1: nhóm_lệnh_1
- b2: kiểm tra điều_kiện , nếu đúng máy thực hiện
+ nhóm_lệnh_lặp
+ nhóm_lệnh_2 và quay về b2 nếu điều_kiện có giá trị sai thì thoát khỏi vòng lặp.
Lệnh lặp for
Trang 162.2 Các cấu trúc điều khiển (tiếp)
• Cú pháp:
do {
Nhóm_lệnh_lặp;} while ( điều_kiện );
Máy thực hiện:
- b1: Nhóm_lệnh_lặp
- b2: kiểm tra nếu điều_kiện có giá trị đúng (true) thì quay
về b1, ngược lại thì thoát khỏi vòng lặp
Lệnh lặp do while
Trang 172.2 Các cấu trúc điều khiển (tiếp)
• Cú pháp:
while (điều_kiện){
Nhóm_lệnh_lặp;}
• Máy thực hiện: kiểm tra nếu điều_kiện có giá trị đúng (true) thì thực hiện Nhóm_lệnh_lặp rồi lặp lại việc kiểm tra điều_kiện , nếu sai thì thoát khỏi vòng lặp
Lệnh lặp while
Trang 182.2 Các cấu trúc điều khiển (tiếp)
public class Example03a {
public static void main(String str[]){
int i;
for(i=30;i<=100;i++)if(i%6==0)
System.out.print(i + "\t");
}
Ví dụ 3a: Tìm và hiện các số nguyên thuộc [30 100] và chia
hết cho 6
Trang 192.2 Các cấu trúc điều khiển (tiếp)
public class Example03b {
public static void main(String str[]){
Trang 202.2 Các cấu trúc điều khiển (tiếp)
public class Example03c {
public static void main(String str[]){
Trang 212.2 Các cấu trúc điều khiển (tiếp)
câu lệnh continue: bỏ qua các lệnh còn lại và quay về đầu
vòng lặp
Trang 222.2 Các cấu trúc điều khiển (tiếp)
câu lệnh break: nhảy ra khỏi vòn lặp vô điều kiện.
Trang 232.2 Các cấu trúc điều khiển (tiếp)
public class Example04a {
public static void main(String str[]){
Trang 242.2 Các cấu trúc điều khiển (tiếp)
public class Example04b {
public static void main(String str[]){
Ví dụ 4b: Hiện dãy các số 1 4 7 10 13 cho đến khi tổng các
số của dãy lớn hơn 200 thì dừng
Trang 252.3 Kỹ thuật vào ra dữ liệu
Giới thiệu
Trang 262.3 Kỹ thuật vào ra dữ liệu (tiếp)
Stream (dòng): là một “dòng chảy” của dữ liệu được gắn với các
thiết bị vào ra
• Dòng nhập: Gắn với các thiết bị nhập như bàn phím, máy scan,file
• Dòng xuất: Gắn với các thiết bị xuất như màn hình, máy in,file
Trang 272.3 Kỹ thuật vào ra dữ liệu (tiếp)
• Java cung cấp hệ thống thư viện thực hiện vào/ra dữ liệu kháphong phú dưới dạng các lớp đối tượng
1 InputStream java.io Nhập dữ liệu mức thấp
2 FileInputStream java.io Đọc dữ liệu tệp tin mức thấp
3 DataInputStream java.io Nhập dữ liệu có định kiểu
4 ObjectInputStream java.io Nhập dữ liệu dạng đối tượng
5 ByteArrayInputStream java.io Đọc dữ liệu dựa trên mảng byte
Trang 282.3 Kỹ thuật vào ra dữ liệu (tiếp)
7 OutputStream java.io Xuất dữ liệu mức thấp
8 FileOutputStream java.io Ghi dữ liệu ra tệp tin mức thấp
9 DataOutputStream java.io Xuất dữ liệu có định kiểu
10 File java.io Xử lý tệp tin
11 Scanner java.util Xử lý nhập dữ liệu đơn giản
Trang 292.3 Kỹ thuật vào ra dữ liệu (tiếp)
• Lớp PrintStream
Xuất dữ liệu
Phần định dạng:
- “%d”, “%f”, “%s”, …
- %nd”, “%[n.m]f”, “%[±n]s”, …
Trang 302.3 Kỹ thuật vào ra dữ liệu (tiếp)
• Lớp Scanner
- Thư viện: java.util.Scanner
- Khai báo biến đối tượng:
Trang 312.3 Kỹ thuật vào ra dữ liệu (tiếp)
• Lớp FileOutputStream
• Các bước thao tác với tệp (ghi dữ liệu):
- Bước 1: Tạo đối tượng ghi tệp*/
PrintStream <tên_biến> = new PrintStream(
Trang 322.3 Kỹ thuật vào ra dữ liệu (tiếp)
public class file01 {
public static void main(String arg[]) throws Exception {
PrintStream ps = new PrintStream(new
FileOutputStream("D:\\HocLT\\data.txt"));ps.printf("Nguyen Van A");
Trang 332.3 Kỹ thuật vào ra dữ liệu (tiếp)
• Lớp FileInputStream
• Các bước thao tác với tệp (ghi dữ liệu):
- Bước 1: Tạo đối tượng đọc tệp
Scanner <tên_biến> = new Scanner(
Trang 342.3 Kỹ thuật vào ra dữ liệu (tiếp)
public class file02 {
public static void main(String arg[]) throws Exception {
Scanner sc = new Scanner(new
FileInputStream("D:\\HocLT\\data.txt"));String ten = sc.nextLine();
int nam = sc.nextInt();
sc.close();
System.out.printf("%s \n%d",ten,nam);
Ví dụ: Đọc tệp data.txt và hiện dữ liệu ra màn hình
Trang 352.3 Kỹ thuật vào ra dữ liệu (tiếp)
}f.close();
Trang 362.4 Xử lý mảng
- Cơ chế cấp phát động
- Khai báo:
Ví dụ:
int a[];
Float b[][];
- Cấp phát vùng nhớ:
Trang 37a[1] = new int[5]; /*hàng 1 có 5 phần tử*/
a[2] = new int[3]; /*hàng 2 có 3 phần tử*/
mảng a:
Trang 382.5 Kiểu Date - Calendar
Date( ms ) Tạo đối tượng theo số mili giây
Date( d,m,y) Tạo đối tượng theo ngày, tháng, năm after( d ) Kiểm tra sau ngày khác
before( d ) Kiểm tra trước ngày khác
equals( d ) So sánh 2 ngày bằng nhau
getDay(),getMonth(), getYear() Lấy ngày, tháng, năm
Lớp Date
Trang 392.5 Kiểu Date - Calendar (tiếp)
Trang 402.5 Kiểu Date - Calendar (tiếp)
Ví dụ: Lấy ngày, tháng, năm hiện tại
Trang 41String str1=new String();
String str2=new String(”Hello world”);
Trang 422.6 Kiểu String (tiếp)
length() Lấy độ dài (số ký tự) của xâu
trim() Cắt bỏ khoảng cách ở hai đầu xâu
charAt(i) Lấy ký tự thứ i trong xâu (bắt đầu từ 0)
substring(i,j) Lấy xâu con từ i đến j-1 trong xâu
equals(s) So sánh bằng với xâu ký tự khác
startsWith(s) Kiểm tra có là đoạn con bắt đầu của xâu endsWith(s) Kiểm tra có là đoạn con kết thúc của xâu
Trang 432.6 Kiểu String (tiếp)
indexOf(s) Cho biết vị trí xuất hiện đầu của đoạn con slastIndexOf(s) Cho biết vị trí xuất hiện cuối của đoạn con stoLowerCase() Chuyển xâu ký tự về dạng chữ thường
toUpperCase() Chuyển xâu ký tự lên dạng chữ hoa
Trang 442.6 Kiểu String (tiếp)
Ví dụ: chuyển đổi xâu về dạng tên riêng
Trang 452.7 Số ngẫu nhiên
• Lớp : Random
• Các bước sinh số ngẫu nhiên:
+ Bước 1: Tạo đối tượng Random
Random a = new Random();
+ Bước 2: Dùng lệnh để lấy số ngẫu nhiên
a.nextInt(); //lấy số nguyêna.nextInt(g); //lấy số nguyên từ 0 đến g-1a.nextFloat(); //lấy số thực từ 0 đến 1
Trang 462.7 Số ngẫu nhiên (tiếp)
Ví dụ: Tạo mảng 100 phần tử có giá trị các phần tử là các số
nguyên ngẫu nhiên trong khoảng [1 500]
Trang 472.8 Thư viện Math
Math.sqrt(x) Tính căn bậc hai
Math.pow(x,y) Tính lũy thừa x y
Math.sin(x),cos,asin,… Tính lượng giác sin, cos, asin, acos…
Math.abs( x ) Tính giá trị tuyệt đối
Math.exp( x ) Tính lũy thừa cơ số E
Math.log( x ) Tính logarit tự nhiên
Math.min(x,y), max Tính min, max
Math.round( x ) Làm tròn số
Math.ceil( x ) Lấy số nguyên cận trên
Math.floor( x ) Lấy số nguyên cận dưới
Trang 482.9 Xử lý ngoại lệ
• Ngoại lệ (Exception): là các lỗi phát sinh trong khi chạychương trình (runtime)
Exception Bao hàm tất cả các lỗi
IOException Lỗi vào/ra dữ liệu
NumberFormatException Lỗi định dạng dữ liệu số
OutOfMemoryException Lỗi tràn bộ nhớ
NullPointerException Lỗi tham chiếu có giá trị null
Trang 49Xử lý lỗi thứ 2
finally{
Xử lý cuối cùng}
Trang 502.9 Xử lý ngoại lệ (tiếp)
Ví dụ: xử lý ngoại lệ phát sinh lỗi khi chuyển 1 xâu sang kiểu số
Trang 513 Bài tập
Bài 1: Tạo ngẫu nhiên N số nguyên Đưa ra giá trị nhỏ nhất
trong N số vừa tạo
Bài 2: Nhập một số nguyên dương N Hiện giá trị của N dạng
nhị phân
Bài 3: Viết chương trình chuẩn hóa một xâu ký tự theo dạng:
- Giữa các từ trong xâu chỉ có 1 dấu cách
- Ký tự đầu và cuối không được là dấu cách
Bài 4: Nhập 1 xâu ký tự Liệt kê số lượng mỗi ký tự có trong xâu
vừa nhập
*) Thực hành các bài tập trong chương 2 của giáo trình
Trang 52Câu hỏi trắc nghiệm