Làm quen vái Eclipse IDE T¿o láp mái bằng cách nhấn phÁi chußt lên package cần thêm láp vào, chọn New → Class Chú ý: Tên áp luôn b ắt đÅu b ằng 1 ký t ự hoa.. Thực thi ch°¢ng trình Nhấn
Trang 1BÀI T ¾P
(OJBECT ORIENTED PROGRAMMING EXERCISES)
Trang 2M ĀC LĀC
Module 0 LÀM QUEN VàI ECLIPSE IDE 3
Module 1 JAVA CN BÀN 13
Module 2 CÁC KHÁI NIàM C¡ BÀN LÀP TRÌNH H¯àNG ĐàI T¯þNG 22
Module 3 KÀ THĀA – ĐA HÌNH 36
Module 4 TÀP HþP 43
Trang 3Module 0 LÀM QUEN V àI ECLIPSE IDE
M ục tiêu:
▪ Làm quen với công cụ lập trình Java (Eclipse)
▪ Tạo workspace (nơi lưu project), tạo project Java, tạo package
▪ Thay đổi workspace
Yêu cầu:
▪ Máy tính phải được cài đặt sẵn JDK (Java Development Kit)
▪ Máy tính phải có sẵn phần mềm soạn thảo hỗ trợ cho lập trình hướng đối tượng dùng ngôn ngữ lập trình Java (Eclipse)
Bài 1 Khởi đßng Eclipse
Khi khái đßng Eclipse, á lần đầu tiên, Eclipse s¿ xuất hián cửa sổ hßi n¢i l°u trữ các project (workspace)
à những lần má sau, Eclipse s¿ nhá workspace này và s¿ tự má Có thể thay đổi workspace này
Bài 2 Thay đổi workspace
Vào File → Switch Workspace
Bài 3 T¿o Project
1 T¿o project mái: Menu File->New->Java Project
Trang 4Module 0 Làm quen vái Eclipse IDE
Nhấn Finish KÁt quÁ trong Project Explorer
Bài 4 Mở Project
Eclipse không hỗ trÿ má project trực tiÁp nên b¿n không có kiểu <double-click-for-open= th°ßng thấy, có
thể má l¿i project đã có bằng 1 trong các cách sau:
Trang 5Nhấn nút Browse để tìm đÁn th° mục chÿa project Chọn project cần Import rồi nhấn Finish
Bài 5 T¿o package
L°u ý NÊN t¿o các package để l°u trữ các láp java Package cho phép l°u trữ các class của ÿng dụng theo nhóm (các láp quan há gần thì l°u trong cùng package)
Mỗi ÿng dụng có thể có mßt hoặc nhiều package Mỗi package chÿa mßt hoặc nhiều class
Đặt tên theo kiểu: a.b.c trong đó các ký tự là tên bất kỳ Ví dụ: chuong01.tuan01.bai01, điều đó có nghĩa
là Eclipse s¿ t¿o cho b¿n 3 th° mục lồng vào nhau: chuong01\tuan01\bai01
L°u ý: các gói luôn đ°ÿc đ¿t tên b ằng ch ữ th°ờng
Trang 6Module 0 Làm quen vái Eclipse IDE T¿o láp mái bằng cách nhấn phÁi chußt lên package cần thêm láp vào, chọn New → Class
Chú ý: Tên áp luôn b ắt đÅu b ằng 1 ký t ự hoa Đ¿t theo ki Ãu TitleCase
Bắt đầu viÁt code Eclipse hỗ trÿ c¢ chÁ code completion rất tát Các b¿n luôn nhß phím Ctrl-SpaceBar để Eclipse hián lên các suggestion
Bài 6 Thực thi ch°¢ng trình
Nhấn chußt phÁi lên láp cần ch¿y, chọn menu Run As-> Java Application
Trang 7Hoặc nhấn F11 để ch¿y tÁp tin hián t¿i, còn Ctrl+F11 biên dịch và ch¿y toàn bß project
Eclipse s¿ tự đßng biên dịch code và báo lỗi
NÁu b¿n có lỗi hay warning thì bên trái của dòng lỗi Ví dụ nh° sau:
Bài 7 Chán lo¿i giao dißn làm vißc
1 Khái đßng Eclipse IDE
2 Chọn Windows\Open Perspective\Other
Chọn Perspective Java(Default)
Trang 8Module 0 Làm quen vái Eclipse IDE Đóng Welcome screen KÁt quÁ
Bài 8 Đổi tên (project, package, class&)
Nhấn chọn tên cần đổi á cửa sổ Package Explorer → F2 → đánh tên mái là xong
Bài 9 VÃn đÁ gõ ti¿ng Vißt (Unicode)
Java sử dụng bÁng mã unicode nên viác gõ tiÁng viát là OK Để gõ đ°ÿc tiÁng viát, đÁm bÁo là project của b¿n phÁi đ°ÿc l°u vái bÁng mã UTF-8
Cách làm nh° sau: Nhấn chußt phÁi lên Project, chọn Properties Chọn mục resources nh° hình
Điều này cho phép project b¿n chọn có sử dụng Unicode
Để cho tất cÁ tā project lúc thiÁt lÁp về sau sử dụng Unicode (khßi mắc công mỗi Project mỗi thiÁt lÁp), ta làm nh° sau: Vào menu Window->References, chọn mục General-> Workspace nh° hình
Trang 9Nhấn Apply Tā đây, bất cÿ project nào t¿o ra đều hỗ trÿ Unicode
Bài 10 Export file jar tự ch¿y (executable jar file)
Nhấn chußt phÁi lên Project cần export, chọn Export
Chọn Runnable JAR file nh° hình Nhấn Next
Chọn Lauch configuration Chọn th° mục chÿa cũng nh° tên file jar Nhấn Finish
Thực thi jar file d°ái d¿ng command-line:
Trang 10Module 0 Làm quen vái Eclipse IDE
NÁu Project của á c¢ chÁ GUI thì có thể má file jar của bằng Java Plaform SE library nh° hình
Bài 11 Thêm th° vißn cho Project
1 Thêm th° vián jar
Để them th° vián Jar mình th°ßng làm theo 2 b°ác sau
• T¿o thự mục chÿa File jar (th°ßng để tên là lib ) -> copy file jar và th° vián đó
• Thực hián add jar file bằng cách : chọn chußt phÁi file jar -> Build Path -> Add to Build Path
là xong ( nh° hình bên d°ái )
Trang 11Chọn Build Path -> Configure Build Path
Source : Phần này b¿n có thể add mßt folder source hoặc là link đÁn th° mục source nào đó
Project : T°¢ng tự nh° source nh°ng đây là refer sang mßt project cùng workspace
Bài 12 Phím tắt hay dùng
1 Mßt sá editing template hay dùng:
Gõ main sau đó nhấn Ctrl-Spacebar s¿ cho publicstaticvoidmain(String[]args){}
Gõ sysout sau đó nhấn Ctrl-Spacebar s¿ cho System.out.println();
Để tìm hiểu thêm, vào menu Window->Reference
Trang 12Module 0 Làm quen vái Eclipse IDE
2 Các phím tắt hay dùng:
Sử dụng phím tắt trong Eclipse s¿ giúp b¿n thao tác nhanh h¢n thay vì phÁi click chußt nhiều lần và trông chuyên nghiáp h¢n Trong Eclipse, vào menu Help->Key Assitst hoặc nhấn tổ hÿp Ctrl-Shift-L để hiển thị
Trang 13Module 1 JAVA CN BÀN
M ục tiêu:
▪ Làm quen với ngôn ngữ lập trình Java
▪ Hiểu được cấu trúc chương trình Java, cách biên dịch và chạy chương trình dùng NNLT Java
▪ Hiểu và áp dụng được nhập xuất dữ liệu, các toán tử trong ngôn ngữ lập trình Java
▪ Hiểu và áp dụng được các cấu trúc điều khiển, cấu trúc lặp trong ngôn ngữ lập trình Java
Yêu cầu:
▪ Bài làm lưu trong workspace có tên MaSV_HoTen
▪ Tạo project tên Module01
▪ Lần lượt tạo các package bai01, bai02, bai03 ứng với 3 phần của Module 1
▪ Mỗi bài tập là một class với tên tương ứng, ví dụ Bai01, Bai02,…
Nhắc l¿i: Cấu trúc của mßt ch°¢ng trình viÁt bằng ngôn ngữ lÁp trình Java
package packageName; // 1 Khai báo tên gói n ếu cần
import java.util.Scanner; // 2 Khai báo thư viện có sẵn nếu cần dùng
public class ClassName // 3 Khai báo tên l ớp
{
/* các ghi chú liên quan */
public void methodName() // 4 Khai báo tên phương thức và tham số
{
Trang 14Module 1 Java cn bÁn
Bài 1 PHÄN LIÊN QUAN Đ¾N NH¾P XUÂT
ViÁt ch°¢ng trình xuất ra màn hình dòng chữ <Hello World!=
L°u ý sử dụng lánh xuất ra màn hình:
▪ Sytstem.out.print(): xuất ra màn hình mßt chuỗi hay mßt giá trị (không xuáng dòng)
▪ Sytstem.out.println(): xuất ra màn hình mßt chuỗi hay mßt giá trị (có xuáng dòng)
▪ Sytstem.out.printf(): xuất ra màn hình mßt chuỗi theo định d¿ng t°¢ng tự nh° ngôn ngữ lÁp trình C++
Cú pháp: System.out.printf(<format-string=, [arg1, arg2, arg3, …]);
- %d: sá nguyên (byte, short, int, long)
- %f: sá thực (float, double)
- %c: ký tự (char)
- %s: chuỗi (string)
- %0: fill sá 0
- Đß chính xác của sá thực: %5.3f: đß chính xác phần lẻ của sá trong format-string là 3
- Dấu – dùng để canh trái, mặc định canh phÁi
Trang 15ViÁt ch°¢ng trình nhÁp vào tên của mình và xuất ra màn hình <Hello + Tên=
HD:
▪ Để nhÁp dữ liáu tā bàn phím, dùng th° vián Scanner bằng cách:
import java.util.Scanner;
▪ Khai báo đái t°ÿng
Scanner sc = new Scanner(System.in);
▪ Dữ liáu nhÁp vào là sá nguyên:
Trang 16Module 1 Java cn bÁn
Bài 2 PHÄN LIÊN QUAN Đ¾N CÁC TOÁN TĂ
Thao tác vái toán tử sá học
Thao tác vái toán tử nái chuỗi
Thao tác vái toán tử 1 ngôi
Trang 17Thao tác vái toán tử pre-increment và post-increment
Trang 18Module 1 Java cn bÁn
Bài 3 PHÄN CÂU TRÚC L¾P VÀ CÂU TRÚC ĐIÀU KHIÂN
Cấu trúc if-else, switch case
Cấu trúc while, do while và for
• Cấu trúc if, if else
• Cấu trúc switch
• Cấu trúc lặp: for, while, do while
Trang 19Phát sinh ng¿u nhiên sá sử dụng láp Random Láp Random nằm trong gói java.util có 1 sá ph°¢ng thÿc:
boolean
nextBoolean(); A true or false value
int nextInt() An integral value between Integer.MIN_VALUE andInteger.MAX_VALUE
long nextLong() A long integral value between Long.MIN_VALUEand Long.MAX_VALUE
float nextFloat() A decimal number between 0.0 (included) and 1.0 (excluded)
double nextDouble() A decimal number between 0.0 (included) and 1.0 (excluded)
import java.util.Random;
public class RandomExercise {
public static void main(String[] args) {
Random rd = new Random();
int = rd.nextInt();
System.out.println( "Number: " + n);
} }
Phát sinh sá ng¿u nhiên nằm trong mßt vùng (min, max)
Trang 20Module 1 Java cn bÁn int min = 65 ;
int max = 80 ;
Random r = new Random ();
int i1 = r.nextInt(max - min + 1 ) + min;
L°u ý: NÁu r.nextInt(max)s¿ trÁ về giá trị giữa 0 và max
ViÁt ch°¢ng trình in ra tổng 1+3+5 … +n nÁu n là sá chẵn, 2+4+6+ … n nÁu n là sá lẻ
ViÁt ch°¢ng trình giÁi ph°¢ng trình bÁc 1
ViÁt ch°¢ng trình tìm USCLN của 2 sá nhÁp vào
ViÁt ch°¢ng trình kiểm tra sá nhÁp vào có phÁi là sá nguyên tá hay không
Tính tổng các sá nguyên tá nhß h¢n N
Tính tổng N sá nguyên tá đầu tiên
ViÁt ch°¢ng trình in ra sá lần kí tự 8a9 xuất hián trong mßt chuỗi
ViÁt hàm tách chuỗi gác thành chuỗi con
VD: chuỗi gác S = <Bai Tap Mon Lap Trinh Java=, chuỗi sau khi tách là
ViÁt hàm để đÁm sá l°ÿng ký tự là sá có trong chuỗi s Chuỗi s đ°ÿc nhÁp tā bàn phím HD: Dùng mã ASCII
để kiểm tra hoặc dùng class Character: Character.isDigit(ký tự) để kiểm ký tự có phải là số hay không
ViÁt ch°¢ng trình in ra tổng của 10 sá chẵn đầu tiên
ViÁt ch°¢ng trình in ra những sá lẻ tā 1 đÁn 99
ViÁt ch°¢ng trình xuất ra tổng các sá là bßi sá của 7 (tā 1 đÁn 100)
ViÁt ch°¢ng trình in ra giá trị lán nhất và nhß nhất trong mßt dãy các giá trị user đã nhÁp
ViÁt ch°¢ng trình đọc mßt giá trị nguyên tā bàn phím và in ra sá đó là sá chẵn, lẻ hoặc zero
ViÁt ch°¢ng trình in ra bßi sá của 3 tā 300 đÁn 3
ViÁt ch°¢ng trình nhÁp vào sá nguyên n và thực hián: Xuất ra màn hình n sá đầu tiên của chuỗi Fibonaci (có hai giá trị đầu là 1 và 1)
ViÁt ch°¢ng trình in ra những hình sau: (mỗi hình sử dụng những vòng lặp khác nhau)
Trang 22Module 2 Các khái niám c¢ bÁn LT HĐT
M ục tiêu:
▪ Cài đặt lớp đối tượng
▪ Tạo, sử dụng đối tượng
▪ Định nghĩa getter/setter cho thuộc tính (kiểm tra ràng buộc trên thuộc tính nếu có)
▪ Tạo constructor có kiểm soát tham số truyền cho thuộc tính
▪ Tạo cơ chế liên lạc giữa các lớp
▪ Ghi chú cho lớp, phương thức (theo dạng document)
Yêu cầu:
▪ Bài làm lưu trong workspace có tên MaSV_HoTen
▪ Tạo project tên Module02
▪ Mỗi bài làm trong một package có tên package là bai01, bai02,…
▪ Bài tập bắt buộc: 1, 3, 4, 5, 7, 8, 9
▪ Viết documentation comment cho class
Định nghĩa mßt láp trong UML:
Cách truy xuất (visibility):
public class Car {
private String carColor ;
private double carPrice = 0.0;
public String getCarColor(String model ) {
return carColor ; }
public double getCarPrice(String model ) {
return carPrice ; }
}
Trang 23Bài 1
BiÁt láp tọa đß có:
▪ Các thußc tính: tọa đß x, tọa đß y và tên tọa đß
▪ Các ph°¢ng thÿc thiÁt lÁp (set), lấy (get) thông tin x, y và tên tọa đß
▪ Các ph°¢ng thÿc khái t¿o: mßt constructor mặc định và mßt construtor đầy đủ tham sá
▪ Ph°¢ng thÿc toString trÁ về thông tin theo m¿u: tên tọa đß(x,y)
Yêu cầu:
a V¿ l°ÿc đồ láp UML cho láp tọa đß
b Cài đặt láp tọa đß theo thiÁt kÁ
c Xây dựng láp khác chÿa hàm main cho phần kiểm nghiám
Bài 2
a ViÁt láp Sinh viên nh° sau:
Attributes:
▪ Mã sinh viên (sá nguyên>0),
▪ Họ tên (chuỗi, không đ°ÿc rỗng),
▪ Điểm LT, điểm TH (sá thực, thußc [0.0,10.0])
Methods:
▪ Constructor mặc định (gán giá trị mặc định),
▪ Constructor nhÁn đầy đủ thông tin để khái t¿o giá trị cho tất cÁ các biÁn instance,
▪ Các getter và setter cho mỗi thußc tính,
▪ Tính điểm trung bình (trung bình=(điểm LT + điểm TH)/2),
▪ Ph°¢ng thÿc toString dißn tÁ đái t°ÿng á d¿ng chuỗi gồm 4 cßt là mã sinh viên, họ tên, điểm LT, điểm TH, điểm TB
Yêu cầu kiểm tra ràng bußc dữ liáu, gán giá trị mặc định khi dữ liáu không hÿp lá
b Xây dựng class chÿa hàm main: t¿o 3 đái t°ÿng sinh viên sv1, sv2, sv3, trong đó:
▪ sv1 chÿa thông tin của chính mình (t¿o bằng constructor đủ thông sá, thông tin biÁt rồi khßi nhÁp
Trang 24Module 2 Các khái niám c¢ bÁn LT HĐT
▪ In bÁng danh sách sinh viên gồm 4 cßt là MSSV, họ tên, điểm LT, điểm TH, điểm TB (bÁng có 3 dòng cho 3 sinh viên) nh° hình bên d°ái
HD: Thông tin sinh viên in trên mßt dòng có định d¿ng Sử dụng String.format(<chuỗi định d¿ng=, đái sá
1, đái sá 2, ….); Trong đó chuỗi định d¿ng giáng c++, ví dụ:
<%-30s=: chuỗi, chiÁm 30 ký tự, dấu trā canh lề trái
a Cài đặt láp hình tam giác, biÁt tam giác có 3 c¿nh ma, mb, mc, viÁt các ph°¢ng thÿc sau:
- Constructor mặc định (không tham sá)
- Constructor đủ tham sá: nếu giá trị truyền có số âm hoặc nếu 3 giá trị không lập thành hình tam
giác thì gá n 3 thuộc tính bằng 0
- Các ph°¢ng thÿc getter/setter: nếu giá trị không hợp lệ thì không gán (giữ lại giá trị cũ)
- Các ph°¢ng thÿc tính chu vi, ph°¢ng thÿc tính dián tích
- Ph°¢ng thÿc trÁ về thông tin kiểu tam giác (th°ßng, cân, đều, không phÁi tam giác)
- Ph°¢ng thÿc toString để dißn tÁ đái t°ÿng á d¿ng chuỗi gồm: thông tin 3 c¿nh, kiểu tam giác, chu
vi, dián tích
Trang 25b ViÁt hàm main t¿o 5 hình tam giác: 2 hình vi ph¿m ràng bußc, 3 hình là tam giác th°ßng, cân, đều Xuất thông tin các hình này theo d¿ng bÁng
HD:
- Ba giá trị lập thành một hình tam giác khi và chỉ khi tổng hai cạnh bất kỳ luôn lớn hơn cạnh còn lại
- Công thức tính diện tích tam giác: với
Bài 4
Cho mô tÁ bài toán:
Sá giao thông cần theo dõi viác đng ký xe (Vehicle) của ng°ßi dân, biÁt mỗi xe cần l°u các thông tin là:
ch ủ xe, loại xe, trị giá xe (>=0), dung tích xylanh (>=0) Dựa vào thông tin trị giá xe và dung tích xylanh, sá giao
thông cũng tính mÿc thuÁ phÁi đóng tr°ác b¿ khi mua xe nh° sau:
- D°ái 100cc, 1% trị giá xe
- Tā 100 đÁn 200cc, 3% trị giá xe
- Trên 200cc, 5% trị giá xe
a Hãy thiÁt kÁ và cài đặt láp Vehicle vái các attributes và methods phù hÿp (có kiểm tra ràng bußc dữ liáu) Láp phÁi có các constructor và phÁi bÁo đÁm tính encapsulation
b Xây dựng class chÿa hàm main, có các công viác:
- T¿o 3 đái t°ÿng Vehicle xe1, xe2, xe3 Dữ liáu đ°ÿc gán sẵn hoặc cho ng°ßi dùng nhÁp
- Xuất bÁng kê khai tiền thuÁ tr°ác b¿ của các xe nh° m¿u:
M¿u kÁt xuất của ch°¢ng trình
Bài 5 *
Láp HangThucPham mô tÁ mßt hàng hóa là hàng thực phẩm trong kho của mßt cửa hàng bán thực phẩm, có các thußc tính: mã hàng (không cho phép sửa, không được để rỗng), tên hàng (không được để rỗng,
m ặc định là <xxx=), đ¢n giá (>=0), ngày sÁn xuÃt (phải trước ngày hiện tại, mặc định là ngày hiện tại) và ngày
h¿t h¿n (phải sau ngày sản xuất, mặc định là ngày sản xuất) Yêu cầu:
a ViÁt các ph°¢ng thÿc setters/getters cho láp HangThucPham Trong các setter, nếu dữ liệu muốn gán không hợp lệ thì gán giá trị mặc định cho phép t°¢ng ÿng của tr°ßng đó
b T¿o mßt constructor có đầy đủ tham sá và mßt constructor có tham sá là mã hàng Nếu mã hàng rỗng thì phát sinh lỗi và không cho phép tạo đối tượng đó, các giá trị khác nếu không hợp lệ thì để mặc định
c ViÁt ph°¢ng thÿc kiểm tra mßt hàng thực phẩm đã hÁt h¿n ch°a
Trang 26Module 2 Các khái niám c¢ bÁn LT HĐT
d Ph°¢ng thÿc toString trÁ về chuỗi chÿa thông tin của hàng thực phẩm, bao gồm thông tin đã hÁt h¿n
ch°a Trong đó: định dạng đơn giá có phân cách hàng nghìn; định dạng kiểu ngày là dd/MM/yyyy
e ViÁt láp khác chÿa hàm main: T¿o 3 đái t°ÿng, trong đó có mßt đái t°ÿng có ngày hÁt h¿n tr°ác ngày sÁn xuất Xuất thông tin 3 mặt hàng này nh° m¿u:
f Kiểm thử láp HangThucPham vái các ràng bußc đã cho
HD:
- Kiểm tra mã hàng:
- Kiểu ngày: dùng lớp định nghĩa sẵn LocalDate
- Kiểm tra ngày này trước hoặc sau ngày kia: dùng phương thức isBefore, isAfter
- Kiểm tra hàng đã hết hạn chưa:
<<property get>>
+ getAccountNumber() : long + getBalance() : double