Luyện giải bài tập Java và thực hành lập trình hướng đối tượng.
Repository lưu lại quá trình học Java của Phan Tiến Đạt: từ nhập xuất, điều kiện, vòng lặp, mảng và chuỗi đến lớp, đối tượng, kế thừa, đa hình, hàm chồng và sơ đồ lớp. Mỗi chương có một thư mục riêng gồm đề bài (PDF) và các bài giải có thể chạy độc lập.
| Chương | Chủ đề | Bài giải | Tài liệu |
|---|---|---|---|
| Chương 1A | Nhập xuất và tính toán | 3 | Chuong01a.pdf |
| Chương 1B | Điều kiện, vòng lặp, mảng và chuỗi | 10 | Chuong01b.pdf |
| Chương 2 | Tổng quan lập trình hướng đối tượng | — | Chuong2_OOP.pdf |
| Chương 3 | Lớp và đối tượng | 4 | Chuong03_LopVaDoiTuong.pdf |
| Chương 4 | Kế thừa | 3 | Chuong04_KeThua.pdf |
| Chương 5 | Tính đa hình | 1 | Chuong05_TinhDaHinh.pdf |
| Chương 6 | Hàm chồng và tạo lớp danh sách | 3 | Chuong06_HamChongVaTaoLopDanhSach.pdf |
| Chương 8 | Sơ đồ lớp (Class Diagram) | — | ChuongVIII_ClassDiagram.pdf |
| Bài tập bổ sung | Bài tập tổng hợp | 4 | BaiTapBoSung.pdf |
—: chương chỉ có lý thuyết, không có bài tập lập trình.
Tài liệu tự biên soạn Java_OOP_LyThuyet_Va_ViDu_ChiTiet.pdf diễn giải lý thuyết, tóm tắt đề và hướng làm của mọi bài tập trong kho.
| Bài | Nội dung |
|---|---|
| Bài 1 | Nhập hai số nguyên, tính tổng, hiệu, tích và thương |
| Bài 2 | Tính chu vi và diện tích hình chữ nhật |
| Bài 3 | Tính chu vi và diện tích hình tròn |
| Bài | Nội dung |
|---|---|
| Bài 1 | Phân loại số nguyên: âm, bằng 0 hoặc dương |
| Bài 2 | Tìm số nhỏ nhất trong ba số nguyên |
| Bài 3 | Kiểm tra số nguyên tố |
| Bài 4 | Liệt kê và tính tổng các nhóm số; xuất N số nguyên tố đầu tiên |
| Bài 5 | Kiểm tra năm nhuận |
| Bài 6 | Phân loại ký tự: nguyên âm, phụ âm hoặc không phải chữ cái tiếng Anh |
| Bài 7 | Chuyển số tháng sang tên tháng tiếng Anh |
| Bài 8 | In tam giác dấu sao theo chiều cao nhập vào |
| Bài 9 | Nhập, xuất, lọc, tính tổng, thêm, xoá và tìm kiếm phần tử trong mảng |
| Bài 10 | Tính độ dài chuỗi, chuẩn hoá khoảng trắng, đếm từ và trích xuất chuỗi con |
Mỗi lớp có thuộc tính private, getter/setter, hàm thiết lập có và không có tham số, cùng các phương thức nhập/xuất.
| Bài | Lớp | Nội dung |
|---|---|---|
| Bài 1 | Diem |
Toạ độ x, y; di chuyển điểm theo (x', y') |
| Bài 2 | HinhChuNhat |
Chiều dài, chiều rộng; tính diện tích và chu vi |
| Bài 3 | HinhTron |
Bán kính; tính diện tích và chu vi |
| Bài 4 | SinhVien |
Mã SV, họ tên, lớp, điểm 3 môn; tính điểm trung bình và xếp loại |
| Bài | Lớp | Nội dung |
|---|---|---|
| Bài 1 | NoiSinh, Nguoi, SinhVien |
Nguoi có một NoiSinh (has-a); SinhVien kế thừa Nguoi, thêm MASV và lớp |
| Bài 2 | Diem, DiemMau, DoanThang |
Đoạn thẳng gồm 2 điểm màu; tính khoảng cách, kiểm tra cùng màu |
| Bài 3 | TamGiac |
Tam giác gồm 3 đỉnh Diem (dùng lại lớp của Bài 2); kiểm tra thẳng hàng, tính chu vi |
Lớp Diem dùng chung cho Bài 2 và Bài 3 nên nằm ở file riêng Diem.java.
| Bài | Lớp | Nội dung |
|---|---|---|
| Bài 1 | HinhHoc, HinhTron, HinhChuNhat |
Lớp trừu tượng hình học; mảng HinhHoc[] gọi nhập, xuất, diện tích, chu vi theo đa hình |
| Bài | Lớp | Nội dung |
|---|---|---|
| Bài 1 | SinhVien, DSSV, QuanLyDSSV |
Quản lý sinh viên: thêm (hàm chồng), xoá, sửa, tìm kiếm, thống kê qua menu |
| Bài 2 | VanPhongPham, Tap, But, DanhSachVPP |
Văn phòng phẩm; đa hình cho nhập/xuất, thêm tập hoặc bút vào danh sách |
| Bài 3 | CanBo, CongNhan, KySu, NhanVien, DSCB |
Quản lý cán bộ: thêm, sửa/xoá theo mã, tìm theo họ tên, hiển thị |
| Bài | Lớp | Nội dung |
|---|---|---|
| Bài 1 | Vehicle, PassengerVehicle, Car, Bus, Truck, Motorbike |
Cây phân cấp phương tiện; xe con và xe buýt thuộc nhóm xe chở khách; input()/print() đa hình |
| Bài 2 | Shape, Resizable, Circle, Square, ResizableCircle, ResizableSquare |
Cài đặt theo sơ đồ lớp; resize(percent) in chu vi và diện tích sau khi đổi kích cỡ |
| Bài 3 | Cho, Sap, SapThucPham, SapQuanAo, SapTrangSuc |
Chợ OOP-Market: nhập danh sách sạp, tính tổng tiền phải đóng (thuế trang sức luỹ tiến) |
| Bài 4 | CaSi, CaSiChuaNoiTieng, CaSiNoiTieng, CongTyXYZ |
Nhập danh sách ca sĩ, tính lương, tìm ca sĩ lương cao nhất |
java-programming-language/
├── Chuong1a/ # package Chuong1a — Bai1.java … Bai3.java
├── Chuong1b/ # package Chuong1b — Bai1.java … Bai10.java
├── Chuong2/ # tài liệu PDF
├── Chuong3/ # package Chuong3 — Bai1.java … Bai4.java, NhapLieu.java
├── Chuong4/ # package Chuong4 — Bai1.java … Bai3.java, Diem.java, NhapLieu.java
├── Chuong5/ # package Chuong5 — Bai1.java, NhapLieu.java
├── Chuong6/ # package Chuong6 — Bai1.java … Bai3.java, NhapLieu.java
├── ClassDiagram/ # tài liệu PDF — sơ đồ lớp
├── BaiTapBoSung/ # package BaiTapBoSung — Bai1.java … Bai4.java, NhapLieu.java
├── Java_OOP_LyThuyet_Va_ViDu_ChiTiet.pdf # tài liệu lý thuyết tự biên soạn
├── giaotrinh-JAVA.pdf # giáo trình Java (nguồn: Tài liệu HUST)
└── README.md
- JDK (Java Development Kit) để biên dịch và chạy chương trình.
- Visual Studio Code với Extension Pack for Java (tuỳ chọn).
- Chỉ dùng thư viện chuẩn của Java, không cần cài thêm gì.
Kiểm tra JDK đã sẵn sàng:
java -version
javac -versionNếu Terminal không nhận lệnh, kiểm tra lại việc cài JDK và biến môi trường PATH.
git clone https://github.com/OwenDepTry/java-programming-language.git
cd java-programming-languageLuôn chạy lệnh từ thư mục gốc java-programming-language. Cú pháp chung:
javac -encoding UTF-8 <ThuMuc>/<TenBai>.java
java <ThuMuc>.<TenBai>Ví dụ:
# Chương 1A – Bài 1
javac -encoding UTF-8 Chuong1a/Bai1.java
java Chuong1a.Bai1
# Chương 3 – Bài 4 (lớp SinhVien)
javac -encoding UTF-8 Chuong3/Bai4.java
java Chuong3.Bai4
# Bài tập bổ sung – Bài 3 (chợ OOP-Market)
javac -encoding UTF-8 BaiTapBoSung/Bai3.java
java BaiTapBoSung.Bai3Biên dịch xong có thể xoá file .class sinh ra; file này đã được bỏ qua trong .gitignore.
Khi chương trình yêu cầu dữ liệu, nhập trực tiếp trong Terminal.
- Mở thư mục
java-programming-languagetrong VS Code. - Cài Extension Pack for Java nếu chưa có.
- Mở file bài tập cần chạy.
- Bấm Run phía trên hàm
main, sau đó nhập dữ liệu trong Terminal.
- Mỗi chương là một thư mục
ChuongXvà cũng là mộtpackagecùng tên, ví dụpackage Chuong3;. - Mỗi bài nằm trong file
BaiN.javavới lớppublic class BaiNchứa hàmmain, để đối chiếu nhanh với đề bài. - Ở các chương hướng đối tượng, lớp chính của đề (như
Diem,SinhVien) được khai báo trong cùng file, lớpBaiNdùng để chạy thử. - Trong một chương, tên lớp không được trùng giữa các file (VS Code biên dịch cả thư mục). Lớp dùng chung cho nhiều bài được tách ra file riêng, ví dụ
Chuong4/Diem.java. - Từ Chương 3 trở đi, mỗi thư mục có
NhapLieu.javachứa các hàm nhập an toàn: gõ chữ thay vì số,NaN, vô cực hoặc giá trị ngoài khoảng cho phép sẽ được yêu cầu nhập lại thay vì làm chương trình dừng. - Setter và hàm thiết lập từ chối dữ liệu sai (kích thước ≤ 0 hoặc lớn hơn
NhapLieu.KICH_THUOC_TOI_DA= 1e100, điểm ngoài [0, 10], số trang ≤ 0) và giữ giá trị cũ; với thuộc tínhfloat, giá trị được kiểm tra sau khi ép kiểu. Các lớp danh sách (DSSV,DSCB) không cho trùng mã, chỉ lưu và trả về bản sao của đối tượng; muốn đổi mã phải gọidoiMa()của danh sách. - Tên file phải trùng tên lớp
public, kể cả chữ hoa và chữ thường.
Phan Tiến Đạt
Sinh viên Công nghệ thông tin · Trường Đại học Sài Gòn
GitHub: @OwenDepTry
- Slide bài giảng và đề bài tập trong các thư mục chương: Ths. Trần Nguyễn Minh Hiếu, giảng viên khoa Công Nghệ Thông Tin trường Đại học Sài Gòn.
- Java_OOP_LyThuyet_Va_ViDu_ChiTiet.pdf: tài liệu do Phan Tiến Đạt tự biên soạn từ các slide trên.