Bài 1. Class Fraction.
1.a
Viết class Fraction (phân
số) có hai thuộc tính kiểu int: numerator (tử số) và denumerator (mẫu số), và các phương thức thành viên
sau:
·
Phương
thức tạo (constructor) public Fraction(int, int) lấy tham số là 02 số kiểu int và khởi tạo các thuộc tính numerator và denumerator.
·
Phương
thức public void display() viết phân số ra màn h́nh dưới
dạng <tử số>/<mẫu số>
Viết class FractionTest
để chạy thử lớp Fraction.. Hàm main của FractionTest
cần làm các nhiệm vụ sau:
·
Khai báo 2
đối tượng f1, f2 kiểu
Fraction và khởi tạo với các giá trị 1/2 và 3/4.
·
Gọi
phương thức display của các đối
tượng đă tạo.
Hăy chạy thử và kiểm tra kết
quả in ra màn h́nh xem chương tŕnh chạy có đúng hay
không. Chú ư thấy rằng
bộ thuộc tính của hai đối tượng khác
nhau có giá trị khác nhau, ví dụ: f1.numerator và f2.numerator là hai phần tử dữ liệu
độc lập, chúng có giá trị khác nhau.
1.b
Sửa nội dung phương thức
tạo để kiểm tra tính hợp lệ của dữ
liệu khởi tạo (phân số phải khác 0). Nếu giá trị khởi tạo cho mẫu số
bằng 0 th́ cần ghi thông báo lỗi ra màn h́nh (sử
dụng System.err) và
khởi tạo đối tượng với giá trị
1/1.
Sửa lớp FractionTest để thử tạo một đối
tượng bằng dữ liệu không hợp lệ.
1.c
Viết thêm phương thức public void reduce() với
chức năng làm tối giản phân số lưu trong
đối tượng chủ. Gợi ư thuật toán:
Khởi tạo divider (số chia)
bằng 2
Lặp với điều kiện
cả tử số và mẫu số đều không nhỏ
hơn divider:
Nếu
cả tử số và mẫu số cùng chia hết cho
divider th́
numerator = numerator / divider và denumerator = denumerator
/ divider
tăng divider thêm 1
Sửa lớp FractionTest để thử nghiệm phương thức reduce() với các phân số sau: 1/1, -3/1, 1/-3,
25/5, 30/66.
1.d
Viết phương thức public Fraction plus(Faction) để thực hiện phép cộng
hai phân số và trả về một phân số là kết
quả của phép cộng. Ví dụ, với
f1 là đối tượng phân số 2/3 và f2 là phân số
1/1, lệnh sau cho kết quả là phân số sum có giá
trị 5/3.
Fraction sum = f1.plus(f2);
Sửa lớp FractionTest để thử
nghiệm phương thức plus().
Bài
2. Scanner
2.a
Có thể dùng một
đối tượng thuộc lớp Scanner để đọc dữ liệu
từ một file text tương tự như đọc
dữ liệu từ bàn phím. Ví dụ:
try {
Scanner input = new Scanner (new File("C:\\Tmp\\test.txt"));
// đọc dữ liệu
int n = input.nextInt();
…
} catch (java.io.FileNotFoundException e)
{ }
Hăy viết một
chương tŕnh Java đọc dữ liệu từ
một file text và in từng từ ra màn h́nh.
2.b
Sửa chương
tŕnh tại câu 2.a để bỏ qua các dấu
.,:….khi đọc các từ trong văn bản.
Gợi ư:
Lệnh sau đây
đặt chế độ cho đối tượng Scanner coi tất cả các kí tự không
phải a..z hay A..Z như các kí tự phân
tách giữa các từ khi thực hiện lệnh
đọc từng từ
input.useDelimiter(Pattern.compile("[^a-zA-Z]"));
Lệnh sau đây
bỏ qua tất cả các kí tự không phải a..z hay A..Z cho đến khi gặp một kí
tự trong khoản a..z hay A..Z
input.skip("[^a-zA-Z]*");