Phần 1: Giới thiệu ngôn ngữ lập trình JavaMục tiêu: Thiết lập biến môi trường Khai báo lớp Quy định đặt tên class file Biên dịch và thực thi chương trình Java Xuất ra chuỗi màn
Trang 1ĐẠI HỌC ĐÀ NẴNG
TRUNG TÂM PHÁT TRIỂN PHẦN MỀM SDC
BÀI TẬP JAVA CĂN BẢN
Đà Nẵng - Năm 2012
Trang 2Phần 1: Giới thiệu ngôn ngữ lập trình Java
Mục tiêu:
Thiết lập biến môi trường
Khai báo lớp
Quy định đặt tên class file
Biên dịch và thực thi chương trình Java
Xuất ra chuỗi màn hình
Nhập một chuỗi từ bàn phím
Bài 1.1 Bài tập mẫu
1.1.1 Tải và cài đặt JDK 1.6.0 và Eclipse
Window XP: click phải My Computer à Chọn Tab Advanced à Environment variables à Chọn vào Path trong phần System Variables Thêm dấu ; sau đó là đường dẫn đến thư mục bin của java jdk, jre
Trang 3 Kiểm tra set biến môi trường thành công: vào run à gõ lệnh cmd
à gõ lệnh: java –version à kết quả như hình dưới
1.1.3 Tải và tạo dự án với công cụ eclipse
Trang 4Code:
Hướng dẫn:
• Lưu file với tên A.java tại thư mục (chẳng hạn) D:\baitapjava\phan1, chắc chắn
rằng file này được đặt tên A.java chứ không phải là A.java.txt
• Lệnh biên dịch file: javac A.java
• Kết quả sẽ thấy file A.class mới được sinh ra trong quá trình biên dịch
• Bạn không thể chạy file này vì thiếu phương thức main()
• Một file nguồn java có thể chứa nhiều khai báo lớp, nhưng chỉ có duy nhất một lớp
có phương thức main() và có bổ từ public ( chẳng hạn như public class A) Trong trường hợp này, tên của file nguồn phải cùng tên với lớp này
1.1.6 Lớp lồng nhau:
Viết một file nguồn java chứa hai lớp A và B trong đó, lớp B được định nghĩa bên trong lớp A Biên dịch nó và kiểm tra tên của các file class được tạo ra từ file nguồn
Trang 5• Một lớp có thể chứa một lớp khác Trong trường hợp này lớp B được gọi là lớp thành viên nội.
• Các class file được tạo ra từ file nguồn này sẽ có tên: A.class và A$B.class
đó tên thông số args có thể đổi sang tên khác hợp lệ trong java, ví dụ: String[] str
• Java là ngôn ngữ lập trình có phân biệt kiểu chữ, do đó ghi String khác với string,
class A {
void test() {
class B { } }
}
public class hello {
public static void main(String[] args) {
// CODE HERE
System.out.println("Xin chao");
} }
Trang 6và System khác với system Bạn lưu ý điều này để gõ chính xác.
• Để biên dịch file này gõ vào: javac hello.java
• Để thực thi gõ vào lệnh: java hello
1.1.9 Lớp có phương thức add(), để tính tổng hai số nguyên
Viết một chương trình chứa một phương thức cộng hai số nguyên và được gọi trong phương thức main()
Code:
Lưu ý:
• Thay vì tạo ra một đối tượng của lớp A, chúng ta có thể gọi trực tiếp phương thức add() trong phương thức main() bằng cách thêm vào từ khóa static trước phương
thức add() Trong trường hợp này, từ khóa static được sử dụng để chỉ ra rằng hàm
add() thuộc tính lớp A nhưng không thuộc bất kỳ đối tượng nào của lớp Phương thức tĩnh có thể được gọi mà không cần tạo ra đối tượng của lớp chứa phương thức này
1.1.10 Lớp chứa phương thức readStr()
Viết một chương trình nhập chuỗi từ bàn phím
Code:
public class add {
int add(int x, int y) {
return (x + y);
}
public static void main(String[] args) {
add a = new add();
System.out.println("Ket qua la: " + a.add(3, 7));
} }
import java.io.*;
public class B {
static String readStr() throws IOException {
InputStreamReader isr = new
Trang 7Lưu ý:
• Nếu một phương thức có khai báo ném một ngoại lệ, có phải được đặt trong khối try/ catch khi gọi
1.1.11 Lớp chứa phương thức readInt()
Viết một chương trình nhập số nguyên từ bàn phím
Code:
Bài 1.2: Viết thêm code
1.2.1 Thêm các lệnh sau vào chương trình hello.java:
Thực thi và kiểm tra kết quả
System.out.println(67+89);
System.out.println("Ket qua la: " + 67+89);
System.out.println("Ket qua la: " + (67+89));
Trang 8Để nó có thể xuất ra màn hình chuỗi chứa ngoặc đôi hoặc ngoặc đơn Ví dụ:
“Trung tam tin hoc SDC”.
1.2.3 Sửa chương trình add:
Để nó có chứa phương thức max(), tìm giá trị lớn nhất của hai số nguyên
1.2.4 Kết hợp chương trình với chương trình readInt():
Để tìm số lớn nhất của hai số nguyên nhập từ bàn phím
Bài 1.3: Viết code từ đầu
1.3.1 Viết chương trình nhập xuất chuỗi ra màn hình:
Viết chương trình nhập vào tên ví dụ: “Hung” từ bàn phím, và xuất ra thông điệp
“Chao Hung” ra màn hình
1.3.2 Viết chương trình tính tổng:
Viết chương trình tính tổng hai số nguyên nhập từ bàn phím
1.3.3 Viết chương trình tính thương:
Viết chương trình tính thương của hai số nguyên được nhập từ bàn phím Kiểm tra kết quả với các số nhập vào là (20 và 2), (10 và 3) (10 và 4) Bạn phải thay đổi chương trình như thế nào để luôn cho kết quả đúng ?
Bài 1.4: Trắc nghiệm
1.4.1 Khi một phương thức lớp con có cùng tên, có cùng danh sách thông số và cùng kiểu dữ liệu trả về với với phương thức trong lớp cha, phương thức này được gọi là gì ?
a extended
b overloaded
c overexternded
d overridden
Trang 91.4.2 Điều nào sau đây phải trùng khớp chính xác đối với những phương thức overloaded để biên dịch đúng ?
a The parameter list
b The return type
c The exceptions thrown
d None of the ablove
1.4.3 Điều gì xảy ra khi biên dịch và thực thi chương trình sau:
a Chương trình khi biên dịch sẽ báo lỗi
b Chương trình chạy bình thường và xuất ra màn hình dòng chữ Xin chao
public static void main(String[] s) {
System.out.println("Xin chao");
} }
Trang 10PHẦN 2: Các phần tử cơ bản của ngôn ngữ Java
Mục tiêu:
Viết các phương thức đơn giản
Sử dụng các hàm toán học trong lớp Math
Truy xuất các thông số của chương trình Java
Nhận một chuỗi số nhập từ bàn phím trên một dòng
Sử dụng cá công cụ javap và javadoc
Bài 2.1: Bài tập mẫu
2.1.1 Giai thừa Viết chương trình tính n giai thừa ký hiệu là n! = 1*2*3* *n.
Yêu cầu: Sử dụng eclipse để viết code.
Hướng dẫn:
Kết quả:
2.1.2 Tính tổng Viết chương trình tính tổng sum S = 1 + 2 + 3+ + n Với n là
một số nguyên không âm nhập từ bàn phím
2.1.3 Tam giác Viết chương trình đọc số nguyên dương nhập từ bàn phím trên
public class fac {
int factorial (int n){
public static void main(String[] args) {
fac a = new fac();
Trang 11một dòng, được phân cách bởi một hoặc nhiều khoảng trắng Chươn trình sẽ kiểm tra ba số nguyên là chiều dài ba cạnh của một tam giác hay không ? Nếu đúng tính
và hiển thị diện tích của tam giác đó, nếu sai, hiển thị thông báo
Hướng dẫn:
• Độ dài 3 cạnh a, b, c là của 1 tam giác thì thỏa mãn điều kiện tổng hai cạnh bất kỳ luôn luôn lớn hơn cạnh còn lại
• Công thức Heron tính tổng diện tích của một tam giác:
2.1.4 Javadoc Dùng javadoc để tạo tài liệu cho chương trình sau:
Trang 12 Xem các file được sinh ra trong thư mục:
2.1.5 Dùng javap để dịch ngược class file test.class được tạo ra sau khi biên dịch
bài test.java ở trên
Hướng dẫn:
Trang 13Bài 2.2: Viết thêm code
2.2.1 Sửa chương trình mẫu 2.1.1 để bạn không cần tạo ra đối tượng của lớp fac trong phương thức chính(nghĩa là không có dòng fac a = new fac();)
2.2.2 Sửa chương trình mẫu 2.1.1 với n là số tự nhiên được nhập vào từ dòng lệnh
Yêu cầu: nếu chương trình fac.java được thực thi, gõ vào java jac 5 chương
trình sẽ hiên thị kết quả:
2.2.3 Sửa chương trình mẫu 2.1.1 với n là số tự nhiên nhập vào từ bàn phím
Bài 2.3: Viết code từ đầu
2.3.1 Viết chương trình tìm số lớn nhất chuỗi các số được đưa vào từ dòng lệnh
Ví dụ: Khi chạy chương trình: Java TimMax 6 5 7 23 14
Kết quả: só lớn nhất là: 23
2.3.2 Viết chương trình kiểm tra một số tự nhiên có phải là số hoàn thiện hay không Số n được gọi là số hoàn thiện nếu n bằng tổng tất cả các ước số của n( trừ chính nó)
Ví dụ:
Số 6 là số hoàn thiện vì: 6 = 1 + 2 +3
Trang 14 Số 28 là số hoàn thiện vì: 28 = 1 + 2 + 4 + 7 + 14
Viết chương trình hiển thị tất cả các số hoàn thiện từ 1 đến 1000
2.3.3 Viết chương trình hoán đổi hai số kiểu int trong java
Ví dụ: int a = 3, b = 5 gọi hàm hoandoi(a, b) à kết quả: a = 5 và b = 3.
2.3.4 Viết chương trình tính tổng các bit 1 của số n kiểu int
Bài 2.4: Trắc nghiệm
2.4.1 Câu lệnh nào khai báo đúng một mảng 5 số nguyên ?
a int a[] = {1, 2, 3, 4, 5};
b int a[];
c int a[] = new int[5];
d int a[] = new int(5);
2.4.2 Kết quả câu lệnh sau là gì ?
Trang 15tượng đang tồn tại Điều này thuận lợi hơn, bởi vì càng ít sử dụng bộ nhớ thì càng ít thời gian thu gom rác, cả hai điều này làm tăng thời gian thực thi chương trình.
PHẦN 3: Cấu trúc dữ liệu và câu lệnh điều khiển
Mục tiêu:
Giá trị mặc định của các biến chưa khởi tạo
Khai báo biến và ép kiểu
Xuất tên của một lớp cho trước
Xử lý chuỗi
Thao tác các số nguyên dài
Bài 3.1: Bài tập mẫu
3.1.1 Giá trị mặc định Hãy xác định giá trị mặc định của các biến chưa khởi tạo
public static void main(String[] args) {
bai3_1_1 v = new bai3_1_1();
System.out.println("a = " + v a );
System.out.println("b = " + v b );
Trang 16public class bai3_1_3 {
public static void main(String[] args) {
// TODO Auto-generated method stub bai3_1_3 t = new bai3_1_3();
System.out.println("Ten lop: " + t.getClass().getName()); }
}
Trang 173.1.4 Đảo chuỗi Viết chương trình nhận vào một chuỗi và hiển thị chuỗi đảo của
nó Ví dụ, nhập vào chuỗi “Hello” à xuất ra chuỗi đảo là: “olleH”
Code:
Kết quả:
Bài 3.2: Viết thêm code
3.2.1 Hãy thay đổi chương trình mẫu 3.1.4 ( đảo chuỗi) để có thể đảo chuỗi sử dụng phương thức reverse() trong lớp StringBuffer.
Gợi ý:
http://www.java2s.com/Code/JavaAPI/java.lang/StringBufferreverse.htm
Bài 3.3: Viết code từ đầu
3.3.1 Viết chương trình nhập vào một số tự nhiên (kiểu int) biểu diễn năm, và đưa
ra kết quả năm đó có phải là năm nhuận hay không ?
Gợi ý: Năm nhuận làm năm:
import java.util.*;
public class bai3_1_4 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.print("nhap vao chuoi str =");
Trang 18 Nếu nó có 2 chữ số tận cùng là 00 thì nó phải chia hết cho 400.
Nếu nó không có 2 chữ số tận cùng là 00 thì nó phải chia hết cho 4
Ví dụ:
Năm 2000: là năm nhuận vì tận cùng bằng 00 và chia hết cho 400
Năm 1900: không phải là năm nhuận vì nó có 2 chữ số tận cùng là 00 nhưng không chia hết cho 400
Năm 20012 là năm nhuận vì chia hết cho 4
3.3.2 Viết chương trình nhập vào 2 số tự nhiên n kiểu int và k kiểu byte và hiển
thị bit thứ k của số n đếm từ phải sang trái (bắt đầu tính từ 1).
Trang 19c public static final int c;
3.4.2 Chương trình sau xuất ra kết quả gì ?
System.out.print(t + " ");
System.out.println(this );
}
public static void main(String[] args) {
Trang 20PHẦN 4: Cách gọi phương thức và mảng hai chiều
Mục tiêu:
Gọi phương thức từ lớp cha
Tạo ngẫu nhiên mảng hai chiều
Sắp xếp mảng
Bài 4.1: Bài tập mẫu
4.1.1 Gọi phương thức từ lớp cha Viết hai lớp trong đó lớp này thừa kế lớp kia,
và gọi phương thức từ lớp cha của nó
Code:
public class bai4_1_1 extends A {
public static void main(String[] args) {
Trang 21Kết quả:
4.1.2 Ma trận ngẫu nhiên Viết chương trình tạo một ma trận ngẫu nhiên ( tức là
mảng hai chiều) và hiển thị ra màn hình
Code:
public class bai4_1_2 {
static int[][] createMatrixRandom(int row, int col) {
int a[][] = new int[row][col];
for(int i = 0; i < row; i++){
for(int j = 0; j < col; j++) {
a[i][j] = (int) (Math.random()*100);
} }
return a;
}
Trang 22Bài 4.2: Viết thêm code
4.2.1 Hãy thay đổi chương trình mẫu 4.1.2 để tạo ra một ma trận, trong đó từng hàng của ma trận được sắp xếp tăng dần
Gợi ý: sắp xếp từng hàng của ma trận
Bài 4.3: Viết code từ đầu
4.3.1 Chương trình sau sẽ xuất ra kết quả bằng bao nhiêu ?
Code:
import java.util.*;
public class bai4_1_3 {
public static void main(String args[]) {
int a[] = {4, 3, 6, 1, 9};
System.out.println("in mang a[] chua sap xep:");
for(int i = 0; i < a length ; i++){
System.out.print(a[i] + "\t");
}
Arrays.sort(a);// goi ham sap xep mang a[]
System.out.println();
System.out.println("in mang a[] da sap xep:");
public class bai4_3_1 {
static byte add(byte x, byte y) {
return (byte)(x+y);
}
public static void main(String[] args) {
System.out println(add((byte)100, (byte)(100)));
}
}
Trang 234.3.2 Một chuỗi được gọi là anagram của một chuỗi khác nếu chuỗi thứ nhất là một hoán vị của chuỗi thứ 2 Ví dụ chuỗi “dare” là một hoán vị của chuỗi “read” Viết chương trình đọc vào hai chuỗi và kiểm tra hai chuỗi đó có phải là anagram
của nhau không ?
4.3.3 Viết chương trình tạo hai ma trận ngẫu nhiên và tính tổng của chúng
4.3.4 Viết chương trình tạo một ma trận ngẫu nhiên và hiển thị vị trí (i, j) tất cả các điểm yên ngựa trong ma trận Điểm yên ngựa là điểm nhỏ nhất hàng chứa nó
public class bai4_4_1 {
public static void main(String[] args) {
int x = 11 & 9;
System.out.println(x);
}
}
public class bai4_4_2 {
public static void main(String[] args) {
int x = 10 | 5;
System.out.println(x);
}
}
Trang 24public class bai4_4_4 {
public static void main(String[] args) {
public class bai4_4_5 {
void modify(int n) {
n = n + 1;
}
public static void main(String[] args) {
int a = 1;
bai4_4_5 t = new bai4_4_5();
System.out.print(a + "; ");
t.modify(a);
System.out.println(a);
}
Trang 25 Tạo lớp con kế thừa từ lớp cha
Tạo phương thức khởi tạo
Nạp chồng(overriloading), ghi đè (overriding)
Sử dụng tham chiếu this, super
Bài 5.1: Bài tập mẫu
5.1.1 Cách dùng tham chiếu this Nạp chồng (overload) phương thức khởi
tạo Xây dựng lớp mô tả các điểm trên màn hình đồ họa Lớp được đặt tên là
Trang 26xuất giá trị một điểm ra màn hình console (tọa độ x, y, màu sắc)
Lưu ý: Khái niệm overloading, trong một lớp có thể có nhiều phương thức cùng
tên nhưng khác nhau về danh sách tham số (kiểu dữ liệu hoặc số lượng tham số)
được gọi là nạp chồng phương thức hay còn gọi là overloading Ví dụ:
public void method(int x) {} //(1)
public void method(float x) {} //(2)
public int method(int y) {} //(3) không hợp lệ vì có kiểu dữ liệu giống phương
System.out.println("x="+this +", y="+this +",
mau="+this mau );
}
}
public class bai5_1_1 {
public static void main(String[] args) {
DIEM objDiem1 = new DIEM();
DIEM objDiem2 = new DIEM(100, 100, "Xanh");
objDiem1.hienThiDiem();
objDiem2.hienThiDiem();
}
}
Trang 27[protected] ten: String;
[protected] ngaysinh: String;// có dạng 10/12/1984
[protected] id: int
+ Phương thức:
khởi tạo: truyền 3 tham số ten, ngaysinh, id
[public] hienthithongtin: id, ten, ngaysinh
* Xây dựng lớp nhanvien kế thừa từ lớp connguoi:
+ Thuộc tính:
[protected] manhanvien: int;
[protected] ngayvaolam: String;// có dạng 20/10/2012
[protected] capbac: int
+ Phương thức:
khởi tạo: kế thừa từ lớp cha connguoi và thêm 3 tham số manhanvien,
ngayvaolam, capbac
[public] hienthithongtin: id, ten, ngaysinh
Lưu ý:Khái niệm overriding
- Nếu lớp con có phương thức giống (tham số và kiểu trả về) phương thức lớp cha được gọi là verride.
- Phương thức override phải có quyền truy xuất >= phương thức bị override
- Phương thức override không được phép quăng loại trừ không hợp lệ đối với phương thức bị override
- Để gọi phương thức bị override của lớp cha ta dùng super.xxx(…) trong đó
xxx(…) là tên phương thức.
Code:
public class bai5_1_2 {
public static void main(String[] args) {
connguoi objConnguoi = new connguoi(1000, "Le Hai", "10/12/1984");
System.out.println(" -Hien thi thong tin nguoi -");
objConnguoi.hienthithongtin();
System.out.println();
System.out.println(" -Hien thi thong tin nhan vien -"); nhanvien objNhanvien = new nhanvien(99, "Nguyen Van", "19/02/1984", 10, "01/01/2012", 7);
objNhanvien.hienthithongtin();
Trang 28Kết quả:
Bài 5.2: Viết thêm code
5.2.1 Hãy thay viết thêm vao chương trình mẫu 5.1.2 để tạo ra lớp sinhvien kế thừa từ lớp connguoi:
* Xây dựng lớp nhanvien kế thừa từ lớp connguoi:
+ Thuộc tính:
[protected] masinhvien: int;
[protected] malop: String;
+ Phương thức:
khởi tạo: nhập các giá trị (masinhvien, malop) của sinh viên và các thuộc tính kế
thừa từ lớp cha connguoi.