Tải bản đầy đủ (.doc) (14 trang)

BÀI tập NGÔN NGỮ lập TRÌNH JAVA

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 (123.53 KB, 14 trang )

BÀI TẬP NGÔN NGỮ LẬP TRÌNH JAVA
Câu 1. Hãy cho biết kết quả in ra màn hình khi thực thi đoạn chương trình sau và giải thích vì
sao có kết quả đó.
public class Cau1{
private static int x = 20;
public static void main (String args[]){
Cau1.x ++;
Cau1 obj1 = new Cau1();
obj1.x --;
Cau1 obj2 = new Cau1();
obj2.x --;
obj1 = new Cau1();
obj1.x --;
System.out.println("x = " + x);
}
}

Câu 2. Hãy cho biết kết quả in ra màn hình khi thực thi đoạn chương trình sau và giải thích
ngắn gọn tại sao có kết quả đó.
public class Cau2{
public static void main (String args[]){
String s1 = "DHNT";
String s2 = new String("DHNT");
if ( s1 == s2)
System.out.println("true");
else
System.out.println("false");
}
}

Câu 3. Hãy cho biết kết quả in ra màn hình khi thực thi đoạn chương trình sau và giải thích


ngắn gọn tại sao có kết quả đó.


public class Cau31{
Cau31(){
System.out.print("Superclass");
}
public static void main (String args[]){
new Cau32();
}
}
class Cau32 extends Cau31{
Cau32(){
System.out.print("Subclass");
}
}

Câu 4. Hãy cho biết kết quả in ra màn hình khi thực thi đoạn chương trình sau và giải thích vì
sao có kết quả đó.
public class Cau4{
public static void main (String args[]){
int i = 5;
TangGiaTri inc = new TangGiaTri();
inc.tang(i);
System.out.println("i = " +i);
}
}
class TangGiaTri{
public void tang(int i){
i = i -2;

System.out.println("i = " +i);
}
}

Câu 5. Hãy viết một ứng dụng Client/Server, sử dụng socket, theo các yêu cầu sau:


-

Chương trình Client: lặp đi lặp lại các công việc sau

Cho phép người dùng nhập vào một chuỗi ký tự;

Gửi chuỗi ký tự nhận được đến Server, nếu xâu nhập vào là “End”
(không phân biệt chữ hoa hay thường) thì kết thúc chương trình;

Nhận dữ liệu trả về từ Server và in ra màn hình;
- Chương trình Server:

Nhận kết nối từ Client;

Nhận chuỗi ký tự từ chương trình Client;

Đổi chuỗi ký tự sang chữ hoa và gửi về cho Client;

Kết thúc chương trình.
Hãy trình bày cách test chương trình Client và Server vừa viết trong trường hợp chỉ sử
dụng một máy và trường hợp client/server chạy trên hai máy đã nối mạng.
Câu 6. Viết chương trình cho phép nhập ba số nguyên từ bàn phím và lưu vào ba biến tương
ứng là num1, num2, num3. Chương trình sẽ sắp xếp ba số đó theo thứ tự num1 <= num2 <=

num3 và xuất kết quả ra màn hình.
Câu 7. Viết chương trình cài đặt một danh bạ điện thoại đơn giản theo các yêu cầu sau:
-

Mỗi mục từ (entry) trong danh bạ bao gồm Họ tên và Số điện thoại.
Sử dụng lớp Vector trong gói java.util để lưu trữ các entry.
Cung cấp các phương thức để thêm một entry vào danh bạ, nhận vào Họ tên và
trả lại số điện thoại, phương thức để thay đổi số điện thoại cho người có Họ tên
nào đó, phương thức để xóa một entry có Họ tên nào đó được truyền vào.
Viết lớp để kiểm tra danh bạ điện thoại vừa cài đặt: hiển thị một menu chọn lựa
đơn giản: 1-thêm, 2-tìm kiếm, 3-sửa đổi, 4-xóa, 5-liệt kê danh bạ, 0-thoát; máy
tính sẽ thực hiện các chức năng tương ứng với chọn lựa của người dùng.

Câu 8. Viết chương trình nhập vào các số nguyên (không lưu vào dãy), đếm xem có bao nhiêu
số nguyên dương và số nguyên âm đã được nhập; tính và in ra màn hình tổng và giá trị trung
bình của các số được nhập, không tính số 0. Chương trình kết thúc việc nhập khi gặp số 0.
Hiển thị giá trị trung bình dưới dạng số chấm động, ví dụ: nếu nhập vào 1, 2, và 0 thì giá trị
trung bình sẽ là 1.5.(R-bai8)
Câu 9. Viết chương trình nhập vào một số nguyên và hiển thị tất cả các thừa số nhỏ nhất của
nó. Ví dụ: nếu số nguyên nhập vào là 120 thì kết quả xuất ra sẽ là 2, 2, 2, 3, 5(R-Programm13)
Câu 10. Hãy thiết kế và cài đặt một lớp tên Fan để biểu diễn cho một chiếc quạt như sau:
-

Có ba hằng số tên SLOW, MEDIUM, FAST với giá trị tương ứng là 1, 2, và 3 chỉ
tốc độ của quạt.
Một biến nguyên tên speed để lưu giữ tốc độ hiện tại của quạt (mặc định là
SLOW).
Một biến kiểu logic tên on để lưu giữ trạng thái bật/tắt của quạt (mặc định là tắt).
Một biến kiểu số thực tên radius để chỉ bán kính của cánh quạt (mặc định là 5)
Một biến kiểu chuỗi tên là color để chỉ màu sắc của chiếc quạt (mặc định là

blue).


-

Một phương thức khởi tạo không tham số để tạo một chiếc quạt với các thuộc
tính mặc định.
- Các phương thức để lấy và đặt giá trị của tất cả các trường thuộc tính.
- Một phương thức tên là toString() trả lại một xâu mô tả về chiếc quạt. Nếu chiếc
quạt đang được bật, phương thức này sẽ trả về tốc độ, màu sắc, và bán kính
dưới dạng một xâu kết hợp. Nếu chiếc quạt không được bật, phương thức trả về
màu sắc và bán kính cùng với xâu “fan is off” dưới dạng một xâu kết hợp.
Viết một chương trình để kiểm tra lớp Fan vừa cài đặt trong đó tạo ra hai đối tượng
thuộc lớp Fan. Gán tốc độ tối đa, bán kính là 10, màu sắc là yellow, và ở trạng thái bật/true
cho đối tượng thứ nhất. Gán tốc độ trung bình, bán kính là 5, màu sắc là white, và ở trạng thái
tắt/false cho đối tượng thứ hai. Hiển thị thông tin mô tả các đối tượng bằng cách triệu gọi các
phương thức toString() của chúng.
Câu 11. Viết chương trình thỏa mãn các yêu cầu sau:
-

Xây dựng một phương thức để xác định xem một số nguyên có phải là số
nguyên tố hay không (là số chỉ chia hết cho 1 và chính nó).
- Sử dụng phương thức vừa viết ở trên để tìm 1000 số nguyên tố đầu tiên và in ra
màn hình 10 số nguyên tố trên một hàng, dưới dạng như sau:
2 3 5 7 11 13 17 19 23 29
31 37 41 43 47 53 59 61 67 71
73 79 83 89 97 ...
...
Câu 12. Xây dựng hai phương thức đảo ngược một dãy số nguyên theo hai cách khác nhau:
copy dãy đó vào một dãy mới và đảo ngược dãy nhưng không tạo ra dãy mới. Viết đoạn

chương trình để test các phương thức vừa tạo.
Câu 13. Hãy thiết kế và cài đặt một lớp tên Stock theo các yêu cầu sau:
-

Một biến kiểu chuỗi tên symbol để lưu giữ ký hiệu của cổ phiếu.
Một biến kiểu chuỗi tên name để lưu giữ tên của cổ phiếu.
Một biến kiểu thực tên previousClosingPrice để lưu giữ giá cổ phiếu của ngày
hôm trước.
- Một biến kiểu thực tên currentPrice để lưu giữ giá cổ phiếu hiện tại.
- Một phương thức khởi tạo mặc định không tham số và một phương thức khởi
tạo để tạo một cổ phiếu với ký hiệu và tên được định rõ (qua tham số).
- Các phương thức để truy cập giá trị của các trường thuộc tính.
- Các phương thức để thay đổi giá trị của previousClosingPrice và
currentPrice.
- Một phương thức tên changePercent() để trả lại tỷ lệ thay đổi từ
previousClosingPrice đến currentPrice.
Viết chương trình để test lớp Stock vừa cài đặt: tạo một đối tượng thuộc lớp Stock với
ký hiệu là SUNW, tên là Sun Microsystems Inc, và giá của lần đóng cửa trước đó là 100. Đặt
giá trị cổ phiếu hiện tại là 90 và hiển thị tỷ lệ thay đổi của giá cổ phiếu.
Câu 14. Viết chương trình để in ra màn hình bốn khuôn mẫu (pattern) như sau (mỗi pattern là
một đoạn chương trình):
Pattern I
1

Pattern II Pattern III
123456
1

Pattern IV
123456



12
123
1234
12345
123456

12345
21
1234
321
123
4321
12
54321
1
654321

12345
1234
123
12
1

Câu 15. Viết một phương thức cho chuyển một số nguyên hệ thập phân sang số hệ nhị phân
được biểu diễn dưới dạng một xâu. Phương thức được khai báo dưới dạng như sau:
public static String convertDecimalToBinary(int value)
Viết đoạn chương trình để test phương thức trên với các giá trị: 8, 298, và 9123.
Câu 16. Hãy thiết kế và cài đặt một lớp Loan theo các yêu cầu sau:

-

Một biến kiểu số thực tên loanAmount để lưu số lượng tiền cho vay
Một biến kiểu nguyên tên numberOfYears để lưu số năm cho vay
Một biến kiểu thực tên annualInterestRate để lưu tỉ lệ lãi suất cho vay hàng
năm.
Một biến kiểu Date tên loanDate để lưu giữ ngày bắt đầu vay.
Một phương thức khởi tạo mặc định không tham số: loanAmount = 1000,
annualInterestRate = 2.5 và numberOfYears = 1.
Một phương thức khởi tạo để tạo một đối tượng kiểu Loan với loanAmount,
annualIntersetRate và numberOfYears được định rõ (qua tham số).
Các phương thức để truy cập giá trị của các trường thuộc tính.
Các phương thức để thay đổi giá trị của các trường loanAmount,
numberOfYears, và annualInterestRate.
Một phương thức tên monthlyPayment để trả lại số tiền phải trả hàng tháng.
Phương thức được khai báo dưới dạng như sau:
public static double monthlyPayment(double annualInterestRate, int
numOfYears, double loanAmount)

-

Một phương thức tên totalPayment để trả lại tổng số tiền phải trả. Phương thức
được khai báo dưới dạng như sau:
public static double totalPayment(double annualInterestRate, int
numOfYears, double loanAmount)

-

Viết chương trình để test lớp Loan vừa cài đặt: nhập vào các giá trị như
annualInterestRate, numberOfYears, và loanAmount từ bàn phím; lấy ngày

giờ hệ thống để lưu vào biến loanDate. In ra màn hình ngày giờ bắt đầu vay, số
tiền phải trả hàng tháng và tổng số tiển phải trả.

Gợi ý cách tính tiền phải trả hàng tháng như sau:
A - số tiền cho vay
B - tỷ lệ lãi suất hàng năm
C - tỷ lệ lãi suất hàng tháng = B / 1200, ví dụ C = 8/1200 = 0.0066666666…


D - số tháng vay
E - số tiền phải trả hàng tháng:
E = (C + C/( (1+C)^D – 1) ) * A
Ví dụ: A = 150,000 USD, tỷ lệ lãi suất hàng năm B = 8%, vậy tỷ lệ lãi suất hàng tháng là
C = 8/1200 = 0.0066666666…, vay trong vòng 30 năm hay D = 30*12 = 360 tháng. Vậy
ta có:
E = (0.0066666666 + 0.0066666666 /((1 + 0.0066666666) ^360 -1) ) * 150,000 =
1,100.64 USD
Câu 17. Giả sử có 8 sinh viên làm bài thi trắc nghiệm gồm 10 câu hỏi, và các câu trả lời được
lưu trữ vào một mảng hai chiều. Mỗi hàng lưu giữ các đáp án của một sinh viên cho các câu
hỏi. Ví dụ, mảng dưới đây lưu giữ kết quả của bài kiểm tra:
0 1 2 3 4 5 6 7 8 9
'A', 'B', 'A', 'C', 'C', 'D', 'E', 'E', 'A', 'D'
'D', 'B', 'A', 'B', 'C', 'A', 'E', 'E', 'A', 'D'
'E', 'D', 'D', 'A', 'C', 'B', 'E', 'E', 'A', 'D'
'C', 'B', 'A', 'E', 'D', 'C', 'E', 'E', 'A', 'D'
'A', 'B', 'D', 'C', 'C', 'D', 'E', 'E', 'A', 'D'
'B', 'B', 'E', 'C', 'C', 'D', 'E', 'E', 'A', 'D'
'B', 'B', 'A', 'C', 'C', 'D', 'E', 'E', 'A', 'D'
'E', 'B', 'E', 'C', 'C', 'D', 'E', 'E', 'A', 'D'


Student 0
Student 1
Student 2
Student 3
Student 4
Student 5
Student 6
Student 7

Đáp án cho các câu hỏi được lưu trữ vào một mảng một chiều: 'D', 'B', 'D', 'C', 'C', 'D', 'A', 'E',
'A', 'D'
Viết chương trình chấm điểm tự động cho các sinh viên trên, hiển thị các sinh viên và số đáp án
đúng theo thứ tự tăng dần của số đáp án đúng.
Câu 18. Hãy thiết kế và cài đặt một lớp Course thỏa mãn các yêu cầu sau:
-

Một biến kiểu chuỗi tên name lưu giữ tên của khóa học.
Một biến kiểu dãy các chuỗi tên students lưu giữ tên của các sinh viên tham gia
khóa học.
Một biến kiểu nguyên tên numberOfStudents lưu giữ số lượng sinh viên của
khóa học.
Một phương thức khởi tạo để tạo một đối tượng thuộc lớp Course với tên khóa
học được định rõ (qua tham số).
Một phương thức tên getName để lấy tên của khóa học.
Một phương thức tên setName để đặt (lại) tên của khóa học.
Một phương thức tên addStudent để thêm một sinh viên vào khóa học.
Một phương thức tên getStudents để trả lại danh sách các sinh viên của khóa
học.
Một phương thức tên getNumberOfStudents để trả lại số lượng sinh viên hiện
tại của khóa học.



Viết chương trình để test lớp Course vừa tạo với các yêu cầu chính như: tạo ít nhất hai đối
tượng (chỉ hai khóa học khác nhau) của lớp Course, thêm các sinh viên vào hai khóa học đó,
hiển thị số lượng sinh viên của từng khóa học và danh sách các sinh viên tham gia khóa học.
Câu 19. Viết một phương thức để tính tổng các chữ số của một số nguyên. Phương thức được
khai báo dưới dạng như sau(R)
public static int sumDigits(int n)
Ví dụ, nếu gọi phương thức sumDigits(234) thì sẽ trả lại giá trị là 2 + 3 + 4 = 9. Viết đoạn
chương trình để test phương thức trên.

Câu 20. Viết một phương thức để tìm số lần xuất hiện của một ký tự trong một xâu. Phương
thức được khai báo dưới dạng như sauR
public static int count(String str, char a)
Ví dụ, nếu gọi phương thức count(“Welcome”, ‘e’) thì sẽ trả lại giá trị là 2.
Câu 21. Viết chương trình cho phép nhập vào một số nguyên dương và hiển thị lên màn hình
tất cả các thừa số nhỏ nhất của nó theo thứ tự giảm dần. Ví dụ, nếu số nguyên được nhập vào
là 120 thì các thừa số nhỏ nhất được hiển thị là 5, 3, 2, 2, 2. Gợi ý: dùng lớp Stack trong gói
java.util để lưu giữ các thừa số rồi sau đó truy cập và hiển thị theo thứ tự đảo ngược.
Câu 22. Thiết kế và cài đặt các lớp theo yêu cầu sau:
-

Một lớp tên Person và hai lớp con của nó có tên là Student và Employee.
Faculty và Staff là các lớp con của Employee.
- Một người (person) có tên, địa chỉ, số điện thoại, và địa chỉ email.
- Một sinh viên (student) có cấp bậc lớp (freshman, sophomore, junior và senior).
Định nghĩa cấp bậc như là một hằng.
- Một người lao động (employee) có một chức vụ, tiền lương và ngày được tuyển
dụng.
- Định nghĩa một lớp tên MyDate chứa các trường year, month, và day.

- Một thành viên của khoa (faculty) có trường lưu giữ các giờ làm việc ở văn
phòng (dưới dạng chuỗi) và một cấp bậc (lecturer, assistant professor,
asscociate professor, professor).
- Một nhân viên (staff) có một chức vụ.
- Viết đè phương thức toString() trong mỗi lớp để hiển thị tên lớp.
Viết một chương trình để test bằng cách tạo một đối tượng của mỗi lớp Person,
Student, Employee, Faculty, và Staff, và gọi phương thức toString() của chúng.
Câu 23. Viết một phương thức để trả lại một số nguyên đảo ngược. Phương thức được khai
báo dưới dạng như sau (R
public static int reverse(int number)
Ví dụ, nếu gọi phương thức reverse(3456) thì sẽ trả lại số nguyên 6543. Viết đoạn chương trình
để test phương thức trên.


Câu 24. Xây dựng lớp RandomCharacter bao gồm các phương thức như sau:
-

public static char getRandomCharacter(char ch1, char ch2) để trả lại một ký
tự ngẫu nhiên trong đoạn từ ký tự ch1 đến ch2.
- public static char getRandomLowerCaseLetter() để trả lại một ký tự thường
ngẫu nhiên.
- public static char getRandomUpperCaseLetter() để trả lại một ký tự hoa ngẫu
nhiên.
- public static char getRandomDigitCharacter() để trả lại một ký tự số ngẫu
nhiên trong đoạn từ ‘0’ đến ‘9’.
- public static char getRandomCharacter() để trả lại một ký tự ngẫu nhiên.
Viết chương trình để test lớp RandomCharacter ở trên: tạo 175 ký tự thường ngẫu
nhiên và in ra màn hình, mỗi hàng 25 ký tự.
Gợi ý: mỗi ký tự đều có một mã Unicode duy nhất trong đoạn từ 0 đến FFFF ở hệ 16 và ‘b’ – ‘a’
= 1.

Câu 25. Viết chương trình cài đặt một danh bạ điện thoại đơn giản theo các yêu cầu sau:
-

Mỗi mục từ (entry) trong danh bạ bao gồm Họ tên và Số điện thoại.
Sử dụng lớp Hashtable trong gói java.util để lưu trữ các entry.
Cung cấp các phương thức để thêm một entry vào danh bạ, nhận vào Họ tên và
trả lại số điện thoại, phương thức để thay đổi số điện thoại cho người có Họ tên
nào đó, phương thức để xóa một entry có Họ tên nào đó được truyền vào.
Viết lớp để kiểm tra danh bạ điện thoại vừa cài đặt: hiển thị một menu chọn lựa
đơn giản: 1-thêm, 2-tìm kiếm, 3-sửa đổi, 4-xóa, 5-liệt kê danh bạ, 0-thoát; máy
tính sẽ thực hiện các chức năng tương ứng với chọn lựa của người dùng.

Câu 26. Viết một phương thức tính Ước số chung lớn nhất của hai số nguyên dương. Phương
thức được khai báo dưới dạng như sau:R
public static int uscln(int m, int n)
Áp dụng phương thức vừa viết ở trên để viết phương thức tìm Bội số chung nhỏ nhất
của hai số nguyên dương. Viết đoạn chương trình để test hai phương thức trên.
Câu 27. Viết một phương thức chuyển một xâu biểu số nguyên ở hệ nhị phân sang một số
nguyên ở hệ thập phân. Phương thức được khai báo dưới dạng như sau:R
public static int parseBinary(String binaryString)
Ví dụ, nếu gọi parseBinary(“10001”) thì sẽ trả lại giá trị là 17. Lưu ý rằng
Integer.parseInt(“10001”, 2) cũng sẽ trả lại giá trị là 17, không được dùng phương thức đó trong
câu hỏi này.
Câu 28. Thiết kế và cài đặt lớp có tên StackOfIntegers để đóng vai trò như là một ngăn xếp
(stack) lưu giữ các số nguyên với các yêu cầu sau:
-

Một biến kiểu dãy có tên elements để lưu giữ các số nguyên trong stack.



-

Một biển kiểu nguyên có tên là size để lưu giữ số lượng hiện tại của các số
nguyên trong ngăn xếp.
- Một phương thức khởi tạo không tham số để tạo một stack rỗng với dung lượng
mặc định là 16.
- Một phương thức khởi tạo có một tham số để tạo một stack rỗng với dung lượng
được chỉ định.
- Một phương thức tên empty() trả lại giá trị true nếu stack là rỗng
- Một phương thức tên peek() trả lại số nguyên ở đỉnh của stack nhưng không xóa
nó khỏi stack.
- Một phương thức tên push(int value) để lưu giữ một số nguyên tại đỉnh của
stack.
- Một phương thức tên pop() để trả lại số nguyên tại đỉnh của stack và loại bỏ
(remove) nó khỏi stack.
- Một phương thức tên getSize() để trả lại số phần tử có trong stack.
Viết chương trình để test lớp StackOfIntegers vừa tạo bằng cách tạo ra một stack để
lưu giữ các giá trị từ 0 đến 10; lấy các phần tử đó ra khỏi stack và in ra màn hình.
Sử dụng lớp StackOfIntegers đó để viết chương trình cho phép nhập vào một số
nguyên dương và hiển thị lên màn hình tất cả các thừa số nhỏ nhất của nó theo thứ tự giảm
dần. Ví dụ, nếu số nguyên được nhập vào là 120 thì các thừa số nhỏ nhất được hiển thị là 5, 3,
2, 2, 2.
Câu 29. Viết hai phương thức nạp chồng (hay tải bội) để trả lại giá trị trung bình của một dãy sử
dụng các khai báo như sau:
public static int average(int[] array);
public static double average(double[] array);
Sử dụng {1, 2, 3, 4, 5, 6} and {6.0, 4.4, 1.9, 2.9, 3.4, 3.5} để test các phương thức trên.
Câu 30. Viết chương tạo file nhị phân có tên Cau30.dat nếu nó chưa tồn tại. Viết thêm dữ liệu
mới vào nó nếu file đó đã tồn tại. Ghi một trăm số nguyên được tạo ngẫu nhiên (có giá trị trong
khoảng từ 0 đến 99) vào file trên sử dụng luồng nhập xuất nhị phân. Đọc lại tập tin vừa ghi lên,

tính tổng các số nguyên được lưu trong file và ghi kết quả ra màn hình.
Câu 31. Thiết kế và cài đặt lớp Coin với các yêu cầu sau:
-

Một hằng nguyên tên HEADS = 0 để chỉ mặt ngửa
Một hằng nguyên tên TAILS = 1 để chỉ mặt sấp
Một biến nguyên tên face để lưu giữ trạng thái sấp hay ngửa của đồng xu.
Một phương thức flip để tạo một giá trị ngẫu nhiên 0 hoặc 1 cho biến face (một
hình thức để tung/lật đồng xu), có khai báo dạng: public void flip().
- Một phương thức khởi tạo để tạo một đồng xu với mặt ngẫu nhiên (sấp/ngửa)
- Một phương thức trả lại giá trị true nếu như mặt đồng xu là ngửa, có khai báo
dạng: public boolean isHeads().
- Một phương thức trả lại một xâu chỉ tình trạng hiện tại của đồng xu, nếu là ngửa
thì trả lại là “Heads”, nếu là sấp thì trả lại là “Tails”, có khai báo dạng: public
String toString().
Viết chương trình có tên CountFlips.java để test lớp Coin vừa tạo ở trên với các yêu
cầu sau: tạo một đối tượng (đồng xu) thuộc lớp Coin và tung/lật đồng xu đó 1000 lần, cho biết
số lần gặp mặt ngửa và sấp trong 1000 lần tung đồng xu đó.


Viết chương trình có tên FlipRace.java sử dụng lớp Coin vừa tạo để giả lập một ván
chơi tung/lật đồng xu giữa người và máy:
-

Tạo hai đồng xu: một đồng cho người chơi và một đồng cho máy tính
Lặp đi lặp lại việc tung/lật ngẫu nhiên hai đồng xu trên cho đến khi có một hoặc
hai đồng xu có ba lần tung/lật mặt ngửa liên tiếp nhau.
Đưa kết quả ván chơi ra màn hình: bên nào tung/lật 3 mặt ngửa liên tiếp nhau
trước thì bên đó thắng cuộc, nếu lật 3 mặt ngửa liên tiếp cùng lúc thì hòa nhau.


Câu 32. Viết một phương thức cho phép đổi từ milliseconds sang hours, minutes, và seconds
sử dụng khai báo như sau:
public static String convertMillis(long timeMillis)
Phương thức trả về một xâu dưới dạng hours:minutes:seconds với ít nhất hai chữ số để biểu
diễn mỗi thành phần hours, minutes, và seconds. Viết đoạn chương trình để test phương thức
trên. Ví dụ: nếu gọi convertMillis(5500) thì phải trả lại xâu 00:00:05, gọi convertMillis(100000)
thì trả lại 00:01:40, gọi convertMillis(555550000) thì trả lại 154:19:10
Câu 33. Một chuỗi được gọi là palindrom nếu như đọc xuôi hay ngược chuỗi đó đều giống như
nhau, ví dụ như: “mom”, “dad”, “noon”. Viết chương trình cho phép nhập vào một chuỗi và
thông báo kết quả ra màn hình là chuỗi đó có phải là palindrom hay không với yêu cầu là
không phân biệt ký tự hoa hay thường.
Câu 34. Thiết kế và cài đặt một lớp tên ClockS để biểu diễn đồng hồ theo các yêu cầu sau:
-

Một đối tượng clock sẽ chỉ có 1 biến (thuộc tính): seconds
Mỗi khi một đối tượng Clock mới được tạo, giá trị của biến seconds sẽ là 0 (giờ
bắt đầu từ nửa đêm)
- Phương thức có khai báo dạng: public void setTime(int h, int m, int s) để thiết
lập một giờ mới. Với h, m, s là các giá trị mới cho hours, minutes, và seconds
- Có 3 phương thức trả lại giá trị hiện thời của mỗi thành phần, có các khai báo
dạng: public int getHours(), public int getMinutes(), public int getSeconds().
- Phương thức có khai báo dạng public String getTime() để trả lại một xâu biểu
diễn thời gian hiện tại được lưu giữ được trình bày theo khuôn dạng hh:mm:ss
- Phương thức có khai báo dạng: public int totalSeconds() để trả về trả về tổng
số giây tính từ thời điểm bắt đầu ngày mới (00:00:00) cho đến thời gian hiện tại
(đang được lưu giữ)
- Phương thức có khai báo dạng: public void addSeconds(int s) để thêm vào
thời gian hiện tại s giây; lưu ý: s có thể là số âm.
Viết một lớp có tên TestClockS chứa phương thức main dùng để test các phương thức
vừa được định nghĩa ở trên.

Câu 35. Viết một phương thức cho phép truyền vào một xâu và trả lại một xâu đã được sắp xếp
theo thứ tự alphabet, sử dụng khai báo dạng:
public static String sort(String s)
Ví dụ: gọi sort(“acb”) thì sẽ trả lại xâu “abc”.


Viết một phương thức để kiểm tra xem hai từ có phải là anagram hay không (sử dụng
phương thức sort() vừa viết ở trên). Hai từ được gọi là anagram nếu chúng chứa các ký tự
giống nhau ở bất kỳ thứ tự nào. Ví dụ: hai từ “listen” và “silent” được gọi là anagram. Sử dụng
khai báo dưới đây:
public static boolean isAnagram(String s1, String s2)
Viết
một
phương
thức
main
để
gọi
isAnagram("silent",
isAnagram("garden", "ranged"), và isAnagram("split", "lisp").

"listen"),

Câu 36. Viết một phương thức theo kỹ thuật đệ quy để trả lại số Fibonacci thứ i (chỉ số), với i
được nhập vào từ bàn phím, sử dụng khai báo sau: public static long fib1(long index)
Dãy Fibonacci nổi tiếng có dạng :
Dãy số: 0 1 1 2 3 5 8 13 21 34 55 89 …
Chỉ số: 0 1 2 3 4 5 6 7

8


9

10 11

Viết một phương thức trong đó sử dụng vòng lặp để tính số Fibonacci thứ i, với i được
đưa vào từ bàn phím, sử dụng khai báo public static long fib2(long index)
Viết một phương thức main để test hai phương thức vừa viết ở trên.
Câu 37. Viết chương trình có tên Cau37.java để thực hiện việc loại bỏ sự hiện diện của một
xâu được chỉ định ra khỏi một tập tin văn bản.
Ví dụ : khi gọi java Cau37 temp.txt hello thì sẽ xóa hết mọi từ hello trong file temp.txt.
Câu 38. Viết một chương trình cho phép truyền vào phương thức main các số nguyên với số
lượng không chỉ rõ như là các xâu tách biệt và hiển thị tổng của chúng ra màn hình.
Viết một chương trình cho phép truyền vào phương thức main các số nguyên với số
lượng không chỉ rõ dưới dạng một xâu và hiển thị tổng của chúng ra màn hình.
Ví dụ khi chạy chương trình sẽ là :
java Cau38a 12 332 34 4545
Tong cac so la 4923
java Cau38b “12 332 34 4545”
Tong cac so la 4923
Câu 39. Viết một phương thức để đổi một số nguyên dương từ hệ 16 sang hệ 10, có khai báo
dạng: public static int hex2decimal(String s) R


Viết một phương thức để dổi một số nguyên dương từ hệ 10 sang hệ 16, có khai báo
dạng: public static String decimal2hex(int d)
Viết một phương thức main để test hai phương thức trên. Lưu ý: không được sử dụng
phương thức Integer.parseInt(s, radix) để thực hiện chuyển đổi (phải tự viết lấy các phương
thức làm chức năng tương tự).
Tất cả các phương thức trên được đặt trong cùng một lớp có tên Cau39

Câu 40. Viết một lớp có tên LinearSearch trong đó có một phương thức tên linearSearch thực
hiện tìm kiếm tuần tự một phần tử trong một dãy số nguyên: trả lại giá trị chỉ vị trí tìm được của
phần tử đó trong dãy, trả lại giá trị -1 nếu không tìm thấy phần tử đó trong dãy. Sử dụng khai
báo dạng: public static int linearSearch(int[] list, int key)
Viết một lớp có tên BinarySearch trong đó có một phương thức tên binarySearch thực
hiện tìm kiếm nhị phân một phần tử trong một dãy số nguyên đã được sắp xếp: trả lại giá trị chỉ
vị trị tìm được của phần tử đó trong dãy, trả lại giá trị âm nếu không tìm thấy phần tử đó trong
dãy. Sử dụng khai báo dạng: public static int binarySearch(int[] list, int key)
Viết một chương trình trong đó khởi tạo ngẫu nhiên một dãy các số nguyên bao gồm
100000 phần tử và khởi tạo một ngẫu nhiên một phần tử cần tìm. Sử dụng các phương thức
được viết ở trên, hãy ước lượng thời gian tìm kiếm phần tử đó trong dãy được tạo theo phương
pháp tìm kiếm tuần tự và tìm kiếm nhị phân. Gợi ý: có thể dùng phương thức
System.currentTimeMillis() để lấy thời gian hiện tại của hệ thống theo milliseconds.
Câu 41. Viết chương trình thực hiện các công việc: đếm số lượng các ký tự (không tính các ký
tự điều khiển như ‘\r’ và ‘\n’), đếm số từ và số hàng của một tập tin văn bản. Từ là tập hợp các
ký tự được ngăn cách bởi các khoảng trắng, các dấu tabs, các ký tự xuống dòng và trở về đầu
dòng. Tên file được truyền dưới dạng tham số dòng lệnh như ví dụ dưới đây:
D:\>java Cau41Cau40.java
File Cau40.java co
880 ky tu
95 tu
26 dong
Câu 42. Hãy viết một ứng dụng Client/Server, sử dụng socket, theo các yêu cầu sau:
-

-

Chương trình Client:

Cho phép người dùng nhập vào một chuỗi ký tự;


Gửi chuỗi ký tự nhận được đến Server;

Nhận dữ liệu trả về từ Server và in ra màn hình;

Kết thúc chương trình.
Chương trình Server:

Nhận kết nối từ Client;







Nhận chuỗi ký tự từ chương trình Client;
Đếm xem trong chuỗi ký tự đó có bao nhiêu từ (tập hợp các ký tự không
chứa khoảng trắng) và gửi kết quả (dưới dạng một chuỗi ký tự) về cho
Client;
Kết thúc chương trình.

Câu 43. Viết chương trình tạo một tập tin có tên Cau43.txt nếu nó chưa tồn tại. Ghi một trăm số
nguyên được tạo ngẫu nhiên lên tập tin trên sử dụng luồng nhập xuất hướng ký tự. Các số
nguyên được ngăn cách bởi các khoảng trắng khi lưu trong tập tin. Đọc dữ liệu trở lại từ file và
hiển thị lên màn hình các số nguyên đó theo thứ tự tăng dần.
Câu 44. Viết chương trình nhập vào một xâu và tách chúng ra thành từng từ, mỗi từ in trên một
hàng. Một từ ở đây được định nghĩa là một chuỗi các chữ cái. Các ký tự không phải là chữ cái
sẽ bị loại bỏ. Trong Java có phương thức chuẩn Character.isLetter(ch) trả lại giá trị true
nếu như ch là một “chữ cái”, phương thức này được dùng cho tất cả các ký tự Unicode.

Câu 45. Viết một phương thức đệ quy có khai báo dạng public static double m(int i) để tính tổng
của chuỗi sau:

Viết phương thức main để test phương thức trên với i đi từ 1 đến 10
Câu 46. Thiết kế và cài đặt lớp có tên RationalNumber để biểu diễn số hữu tỷ theo các yêu
cầu sau:
-

-

Có hai biến private kiểu nguyên có tên numerator, denominator để lưu tử số và
mẫu số của một số hữu tỷ.
Có một phương thức để tìm ước số chung lớn nhất của hai số nguyên, có khai
báo dạng: private int gcd(int num1, int num2).
Có một phương thức để tối giản số hữu tỷ, có khai báo dạng: private void
reduce(), ví dụ với phân số là 3/9 thì sẽ rút gọn lại thành 1/3
Có một phương thức khởi tạo để tạo một số hữu tỷ với tham số truyền vào là tử
số và mẫu số; phải đảm bảo rằng phân số được tạo lập phải có nghĩa: mẫu số
không thể bằng 0 (nếu truyền vào bằng 0 thì chuyển lại là 1), tử số sẽ “chứa”
dấu của số hữu tỷ (không có dấu âm ở mẫu số), số hữu tỷ được tạo phải tối giản
(gọi phương thức reduce() vừa viết ở trên), ví dụ: 2/6 -> 1/3.
Có các phương thức để trả lại giá trị của tử số và mẫu số của một số hữu tỷ.
Có một phương thức để trả lại một số hữu tỷ (đối tượng thuộc lớp
RationalNumber) là số nghịch đảo của số hữu tỷ đang xét, có khai báo dạng:
public RationalNumber reciprocal()
Có một phương thức cho phép cộng số hữu tỷ đang xét với một số hữu tỷ khác
và trả lại một số hữu tỷ mới, có khai báo dạng: public RationalNumber add
(RationalNumber op2).



-

Có một phương thức cho phép trừ số hữu tỷ đang xét với một số hữu tỷ khác và
trả lại một số hữu tỷ mới, có khai báo dạng: public RationalNumber subtract
(RationalNumber op2).
Có một phương thức cho phép nhân số hữu tỷ đang xét với một số hữu tỷ khác
và trả lại một số hữu tỷ mới, có khai báo dạng: public RationalNumber multiply
(RationalNumber op2).
Có một phương thức cho phép chia số hữu tỷ đang xét với một số hữu tỷ khác
và trả lại một số hữu tỷ mới, có khai báo dạng: public RationalNumber divide
(RationalNumber op2)
Có một phương thức để cho biết số hữu tỷ đang xét có bằng một số hữu tỷ khác
được truyền vào hay không, có khai báo dạng: public boolean equals
(RationalNumber op2)
Có một phương thức tên toString() để trả lại một xâu biểu diễn số hữu tỷ đang
xét dưới dạng chuỗi, ví dụ: 3/5.

Viết chương trình có tên RationalTester.java để test lớp RationalNumber ở trên với
các yêu cầu như sau:
-

Tạo hai đối tượng thuộc lớp để biểu diễn hai số hữu tỷ lần lượt là 6/8 và 1/3
In hai số hữu tỷ vừa tạo ra màn hình.
Test các phương thức equals, reciprocal, add, substract, multiply, divide
được viết trong lớp RationalNumber và ghi kết quả ra màn hình để đối chiếu.

Câu 47. Viết một phương thức có khai báo dạng: public static String replace(String x, String
y, String z) để trả lại một xâu mới bằng cách thay thế tất cả xâu y có trong xâu x bằng xâu z.
Viết phương thức main để test phương thức vừa viết, tất cả các phương thức trên được đặt
trong lớp Cau47.

Câu 48. Viết một phương thức đệ quy dùng để hiển thị giá trị của một số nguyên theo thứ tự
đảo ngược ra màn hình, sử dụng khai báo dạng: public static void reverseDisplay(int value).
Viết phương thức main để test reverseDisplay, ví dụ như khi gọi reverseDisplay(2341) thì sẽ
hiển thị 1432; tất cả các phương thức trên được đặt trong lớp Cau48.
------------------HẾT-------------------



×