Lab03. More on Java

 

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 numeratordenumerator.

·         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.numeratorf2.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]*");