Xem Nhiều 12/2022 #️ Java: Bài Tập Phần Class / 2023 # Top 15 Trend | Caffebenevietnam.com

Xem Nhiều 12/2022 # Java: Bài Tập Phần Class / 2023 # Top 15 Trend

Cập nhật thông tin chi tiết về Java: Bài Tập Phần Class / 2023 mới nhất trên website Caffebenevietnam.com. Hy vọng nội dung bài viết sẽ đáp ứng được nhu cầu của bạn, chúng tôi sẽ thường xuyên cập nhật mới nội dung để bạn nhận được thông tin nhanh chóng và chính xác nhất.

Đăng ký nhận thông báo về những video mới nhất

Bài tập 1:

Tạo class có tên SoHoc gồm có các thuộc tính và phương thức sau:

+ Thuộc tính private: number1, number2

+ Phương thức:

– Các hàm tạo không đối số, đầy đủ đối số

– Các phương thức get, set cho tất cả các thuộc tính

– inputInfo(): dùng để nhập 2 số number1, number2

– printInfo(): dùng để hiển thị number1, number2

– addition(): dùng để cộng number1, number2

– subtract(): trừ number1, number2

– multi(): dùng để nhân number1, number2

– division(): dùng để chia number1, number2.

Bài tập 2:

Viết class NhanVien gồm các thuộc tính:

+ Tên

+ Tuổi

+ Địa chỉ

+ Tiền lương (kiểu double)

+ Tổng số giờ làm (kiểu int)

Constructor không tham số. Constructor đầy đủ tham số. Các hàm get/set

Và các phương thức:

– void inputInfo() : Nhập các thông tin cho nhân viên từ bàn phím

– void printInfo() : in ra tất cả các thông tin của nhân viên

– double tinhThuong(): Tính toán và trả về số tiền thưởng của nhân viên theo công thức sau:

Nếu tổng số giờ làm của nhân viên <100 thì thưởng = 0

Bài tập 3:

Tạo lớp Student, lưu trữ các thông tin một sinh viên:

– Mã sinh viên: chứa 8 kí tự

– Điểm trung bình: từ 0.0 – 10.0

– Tuổi: Phải lớn hơn hoặc bằng 18

– Lớp: Phải bắt đầu bởi kí tự ‘A’ hoặc kí tự ‘C’

Constructor không tham số. Constructor đầy đủ tham số. Các hàm get/set

a. phương thức inputInfo(), nhập thông tin Student từ bàn phím

b. phương thức showInfo(), hiển thị tất cả thông tin Student

c. Viết phương thức xét xem Student có được học bổng không? Điểm trung bình trên 8.0 là được học bổng

Bài tập 4:

Học viện V1Study thực hiện trao học bổng cho các học viên xuất sắc và đáp ứng đủ các yêu cầu sau:

a. Là học viên đăng ký khóa học HDSE

c. Không vi phạm nội quy của trung tâm

d. Các kì thi chỉ thi lần đầu tiên

Các dữ liệu a b c d của 1 học viên được nhập từ bàn phím.

Viết chương trình xem học viên đó có được học bổng không.

Bài tập 5:

Tạo class SoNguyenTo gồm:

biến a lưu trữ 1 số nguyên tố.

Constructor không tham số. 

Constructor 1 tham số: public SoNguyenTo(int x){}. Nếu x là số nguyên tố thì lưu x vào biến a. Nếu không thì in ra màn hình: x không phải là số nguyên tố, không lưu trữ.

Hàm boolean isSoNguyenTo(int x){} kiểm tra số x có phải số nguyên tố không.

Hàm int timSoNguyenToTiepTheo(){} tìm và trả về số nguyên tố liền sau số nguyên tố a.

Hàm get/set biến a. Nếu tham số truyền vào hàm set là 1 số nguyên tố thì mới gán vào a. Nếu không thì hiển thị thông báo: không set.

Ở hàm Main. Khai báo 1 đối tượng thuộc class SoNguyenTo và test các hàm đã viết.

Bài tập 6:

Xây dựng lớp tam giác (Triangle) có các thành phần:

* Các thuộc tính: 3 cạnh a, b, c của tam giác.

* Các phương thức:

– Nhập độ dài 3 cạnh

– Xác định kiểu tam giác

– Tính chu vi tam giác

– Tính diện tích tam giác

Bài tập 7:

Xây dựng lớp hình chữ nhật (Rectangle) có các thành phần sau:

* Các thuộc tính: chiều dài, chiều rộng.

* Các phương thức:

– Nhập chiều dài, chiều rộng

– Tính diện tích

– Tính chu vi

Bài tập 8:

Xây dựng lớp Phân số (Fraction) có các thành phần sau:

* Các thuộc tính: Tử số, mẫu số.

* Hàm tạo không đối số và hai đối số để khởi tạo giá trị cho tử số và mẫu số.

* Các phương thức setter và getter.

* Các phương thức:

– Nhập phân số

– In Phân số

– Rút gọn phân số

– Nghịch đảo phân số

– add(), sub(), mul(), div() tương ứng để thực hiện cộng, trừ, nhân, chia hai phân số cho nhau.

Bài tập 9:

Xây dựng lớp số phức có các thành phần sau:

+ Các thuộc tính:

– Phần thực

– Phần ảo

+ Các hàm thành phần:

– Cộng hai số phức

– Trừ hai số phức

– Nhân hai số phức

– Chia hai số phức

Nhập vào 2 số phức và thực hiện các phép toán trên hai số phức đó.

Bài tập 10:

Xây dựng lớp Vectơ có các thành phần sau:

+ Các thuộc tính:

– Hoành độ đầu

– Tung độ đầu

– Hoành đô cuối

– Tung độ cuối

+ Các phương thức:

– Kiểm tra hai vectơ có bằng nhau không?

– Tính góc giữa 2 vectơ

– Tính module của 2 vectơ

– Kiểm tra hai vectơ có cùng phương không?

– Cộng hai vectơ

– Trư hai vectơ

– Nhân hai vectơ

Nhập vào 2 vectơ và thực hiện các phép toán trên hai vectơ đó.

Bài tập 11:

Xây dựng lớp đa thức (polylomial) và các phép toán trên đa thức. Thực hiện nhập vào 2 đa thức và tính tổng, tích của nó.

Bài tập 12:

Xây dựng lớp ma trận và các phép toán trên ma trận. Thực hiện nhập vào 2 ma trận và tính tổng, tích của nó.

Bài tập 13:

Xây dựng lớp đa giác, hình bình hành thừa kế từ đa giác, hình chữ nhật thừa kế từ hình bình hành và hình vuông thừa kế từ hình chữ nhật. Nhập vào các thuộc tính cần thiết của mỗi hình và tính chu vi, diện tích của hình đó.

Bài tập 14:

Xây dựng lớp điểm, lớp elip thừa kế từ lớp điểm, lớp đường tròn thừa kế từ lớp elip. Nhập vào các thuộc tính cần thiết của elip và tính diện tích.

Bài tập 15:

Xây dựng lớp tam giác, lớp tam giác vuông, tam giác cân thừa kế từ lớp tam giác. Lớp tam giác đều thừa kế từ lớp tam giác cân.

Bài tập 16:

Mô phỏng sự hoạt dộng của một chiếc đèn pin. Với hai nhóm đối tượng cơ bản là Đèn (FlashLamp) và Pin (Battery). Đối tượng pin mang trong mình thông tin về trạng thái năng lượng, đối tượng đèn sữ sử dụng một đối tượng pin để cung cấp năng lượng cho hoạt động chiếu sáng.

Mô tả chi tiết lớp các đối tượng pin và đèn như sau:

FlashLamp

– status: boolean

– battery: Battery

+ FlashLamp()

+ setBattery(Battery): void

+ setBatteryInfo(): int

+ turnOn(): void

+ turnOff(): void

Battery

– energy: int

+ Battery()

+ setEnergy(int): void

+ getEnergy(int): int

+ decreaseEnergy(): void

1. Xây dựng lớp Pin (Battery) với các thuộc tính và các phương thức đã cho như trong sơ đồ trên. Trong đó:

– Thuộc tính: energy có kiểu số nguyên thể hiện năng lượng của Pin.

– Hàm tạo:

Battery(): Khởi tạo mặc định giá trị năng lượng Pin (energy) là 10

– Phương thức:

+ void setEnergy(int energy): Thiết đặt lại giá trị mới cho pin (thực hiện việc sạc pin)

+ int getEnergy(): Trả về thông tin năng lượng pin đang có

+ void decreaseEnergy(): mỗi lần Pin được sử dụng, năng lượng của Pin sẽ giảm đi 2 đơn vị.

2. Xây dựng lớp FlashLamp với các thuộc tính và phương thức như trong sơ đồ trên. Trong đó:

– Thuộc tính:

+ boolean status: trạng thái của đèn, nếu status = true tức đèn được bật, ngược lại đèn tắt.

+ Battery battery: pin của đèn

– Hàm tạo:

FlashLamp(): khởi tạo trạng thái đèn tắt và chưa có pin.

– Phương thức:

+ void setBattery(Battery b): nạp pin cho đèn

+ int getBatteryInfo(): lấy về năng lượng Pin của đèn

+ void turnOff(): Chuyển trạng thái đèn là false. In ra thông tin: Đèn tắt.

3. Xây dựng lớp TestFlashLamp chứa phương thức main() với kịch bản như sau:

– Tạo một đối tượng Battery

– Tạo một đối tượng FlashLamp

– Lắp pin cho đèn

– Bật và tắt đèn pin 10 lần

– Hiển thị ra màn hình mức năng lượng còn lại trong pin.

Bài tập 17:

Câu hỏi 1:

Một lớp gọi là MyPoint, thể hiện một mô hình điểm hai chiều (2D) gồm hai tọa độ x và y, được thiết kế theo dạng sơ đồ lớp. Lớp MyPoint bao gồm:

– Hai biến thể hiện x (kiểu int) và y (int).

– Hàm tạo không đối số dùng để khởi tạo một điểm có tọa độ (0,0).

– Một hàm tạo dùng để khởi tạo một điểm với tọa độ đã cho theo người dùng.

– Các phương thức getter và setter cho các biến thể hiện x và y.

– Một phương thức setXY() để set giá trị cho cả x và y.

– Phương thức toString() trả về mộ mô tả chuỗi theo định dạng “(x, y)”.

– Một phương thức gọi là distance(int x, int y) trả về khoảng cách từ điểm này tới điểm khác tại các tọa độ (x, y) đã cho.

– Một phương thức tải chồng distance(MyPoint point1) trả về khoảng cách từ điểm hiện thời tới điểm point1.

Yêu cầu dành cho bạn: Viết mã lệnh xây dựng lớp MyPoint ở trên. Rồi viết một lớp có tên TestMyPoint để kiểm thử chương trình của bạn.

Gợi ý:

// Tải chồng phương thức distance() public double distance(int x, int y) { int xDiff = this.x – x; int yDiff = … return Math.sqrt(xDiff * xDiff + yDiff * yDiff); } public double distance(MyPoint another) { int xDiff = this.x – another.x; … } MyPoint p1=new MyPoint(3,0); MyPoint p2=new MyPoint(0,4); … System.out.println(p1.distance(p2)); System.out.println(p1.distance(5,6));

Câu hỏi 2:

Một lớp gọi là MyCircle, nó miêu tả một hình tròn có tâm là (x,y) và một bán kính. Lớp MyCircle sử dụng một thể hiện của lớp MyPoint (đã tạo ở câu 1) làm tâm của nó. Lớp MyCircle bao gồm:

– Hai biến thể hiện private: tâm (một thể hiện của MyPoint) và bán kính (có kiểu int).

– Một hàm tạo để khởi tạo hình tròn với tâm có tọa độ (x,y) và bán kính được đưa ra từ người dùng.

– Một hàm tạo khác để khởi tạo một hình tròn với tâm là thể hiện của lớp MyPoint và bán kính tương ứng.

– Các phương thức getter và setter.

– Phương thức toString() trả về một chuỗi mô tả hình tròn hiện thời theo dạng ”Hình tròn @ (x,y) bán kính=r”.

– Phương thức getArea() trả về diện tích của hình tròn.

Bạn hãy xây dựng lớp MyCircle. Ngoài ra, bạn viết lớp TestMyCircle để kiểm thử chương trình của bạn.

Bài tập 18: Hệ thống quản lý sản phẩm

1. Tạo một lớp có tên Product bao gồm các thuộc tính và phương thức sau:

· String Name

· String Description

· double Price // 0 < Price <= 100

· int[ ] rate // lưu các đánh giá của người dùng cho sản phẩm, giá trị từ 1 – 5

· void viewInfo() // hiển thị tên, giá và mô tả về sản phẩm

2. Tạo lớp Shop gồm các thuộc tính và phương thức sau:

· ArrayList ProductList // lưu danh sách các sản phẩm của shop

· void  addProduct()  // yêu cầu người dùng nhập thông tin của sản phẩm rồi lưu vào ProductList

· void removeProduct() // yêu cầu người dùng nhập vào tên sản phẩm sau đó tìm và xóa sản phẩm có tên tương ứng trong ProductList

· void iterateProductList() // hiển thị các sản phẩm trong ProductList, gọi phương thức  viewInfo() của lớp Product, tính trung bình cộng đánh giá cho từng sản phẩm và hiển thị thông tin ra màn hình.

· void searchProduct() // yêu cầu người dùng nhập vào 2 số, sau đó tìm và hiển thị thông tin của những sản phẩm có giá nằm giữa hai số đó.

3. Tạo menu:

PRODUCT MANAGEMENT SYSTEM

Add new product

Remove product

Iterate product list

Search product

Exit

và thực thi các phương thức tương ứng trong lớp Shop với mỗi mục chọn.

Câu hỏi thêm:

Tạo thêm một mục trong Menu ứng với phương thức gọi là sortProduct() đặt trong lớp Shop để sắp xếp các sản phẩm trong ProductList theo giá.

Bài tập 19: Quản lý tài khoản ngân hàng

Trong đó:

– accountNumber : Số tài khoản ngân hàng

– accountName : Tên chủ tài khoản

– balance : Số tiền có trong tài khoản

+ BankAccount (String, String): Phương thức thiết lập để tạo tài khoản với số tiền =0; tên tài khoản và số tài khoản là tham số truyền vào.

+ getAccountNumber() : Lấy về thông tin số tài khoản

+ getAccountName() : Trả về tên chủ tài khoản

+ getBalance() : Trả về số tiền hiện có trong tài khoản

+ deposit(double): Nạp tiền vào tài khoản

+ withdraw(double) : Chuyển khoản/rút tiền với số tiền được truyền vào là tham số; hàm trả về true nếu số tiền cần rút <= số tiền trong tài khoản; cập nhật lại số tiền trong tài khoản nếu rút thành công; ngược lại hàm trả về false.

Cho lớp Bank có quan hệ với lớp BankAccount như sau

Chứa danh sách các tài khoản hiện có tại ngân hàng.

– search(String) : int

 Phương thức này trả về chỉ số của tài khoản ngân hàng có số tài khoản là tham số trong list; nếu không  tồn tại tài khoản nào có số tài khoản như tham số thì hàm trả về -1.

+ getTotal(): int

Phương thức này trả về số lượng tài khoản hiện có tại ngân hàng.

+ getItem(String): BankAccount

Phương thức này nhận tham số đầu vào là số tài khoản ngân hàng, và trả về đối tượng BankAccount có số tài khoản là tham số truyền vào; nếu số tài khoản không hợp lệ hàm sẽ trả về giá trị null.

+ addAccount(String, String): boolean

Phương thức này nhận 2 xâu ký tự lần lượt là số tài khoản và tên chủ tài khoản. Nếu số tài khoản đã tồn tại trong hệ thống thì hàm sẽ trả về giá trị false; ngược lại hàm sẽ thêm một tài khoản mới có thông tin là tham số truyền vào và trả về giá trị true.

+ depositMoney(String, double) : boolean

Thực hiện nạp tiền vào tài khoản; nếu tồn tại số tài khoản trong hệ thống thì cập nhật lại số tiền của tài khoản và trả về giá trị true, ngược lại trả về false

+ withdrawMoney(String, double) : boolean

+ removeAccount(String) : boolean

Loại bỏ tài khoản có số tài khoản được truyền vào khỏi danh sách; nếu không tồn tại tài khoản nào có số tài khoản đó thì trả về false; ngược lại trả về true.

Bạn hãy xây dựng chương trình quản lý ngân hàng với các chức năng sau:

Nhập một danh sách các tài khoản hiện có của ngân hàng

Sinh ngẫu nhiên số tiền trong tài khoản cho các tài khoản hiện có trong hệ thống

Hiển thị ra màn hình thông tin các tài khoản cho ngân hàng

Nạp thêm 500 triệu đồng cho số tài khoản 1050008855

Thực hiện rút 30 triệu đồng từ tài khoản 1050008854

Hiển thị in ra màn hình thông báo số dư và tình trạng giao dịch sau khi thực hiện nạp và rút tiền tại các tài khoản ở trên.

Bài tập 20: Quản lý số

Xây dựng một lớp có tên So gồm các thuộc tính và phương thức sau:

+ Các thuộc tính:

double number

+ Các phương thức:

Các phương thức tạo không tham số, đầy đủ tham số

Các phương thức getter, setter

inputNumber() để nhập liệu

showNumber() để hiển thị

kiemTraNguyen() để kiểm tra number có phải số nguyên không

kiemTraChanLe()

kiemTraAmDuong()

kiemTraChanDuong()

kiemTraLeAm()

kiemTraChinhPhuong()

kiemTraNguyenTo()

kiemTraHoanHao()

kiemTraDacBiet()

Java: Solution Tham Khảo Bài Tập Phần Class / 2023

package solution_bai_tap1; import java.util.Scanner;

/** * * @author LongDT */ public class NhanVien {

package solution_bai_tap1;

public class Solution_bai_tap1 {

public static void main(String[] args) { NhanVien nv1=new NhanVien(); nv1.inputInfo(); nv1.printInfo(); }

package bai.tap.pkg4;

import java.util.Scanner;

/** * @param args the command line arguments */ public static void main(String[] args) { int x; Scanner sc = new Scanner(System.in); System.out.print(“Mời bạn nhập 1 số: “); x = sc.nextInt(); SoNguyenTo snt = new SoNguyenTo(x); }

}

package bai.tap.pkg4;

int a;

public SoNguyenTo() { a = 0; }

public SoNguyenTo(int x) { if (isSoNguyenTo(x) == true) { this.a = x; System.out.printf(“%d là số nguyên tố, lưu trữ.n”, x); System.out.println(“Số nguyên tố tiếp theo là: ” + timSoNguyenToTiepTheo()); } else { System.out.printf(“%d không phải là số nguyên tố, không lưu trữ.”, x); } }

boolean isSoNguyenTo(int x) { boolean flag = true; if (x < 2) { flag = false; } else { for (int i = 2; i <= Math.sqrt(x); i++) { if (x % i == 0) { flag = false; break; } } } return flag; }

int timSoNguyenToTiepTheo() { int nguyentotieptheo; int i = 0; while (true) { if (isSoNguyenTo(this.a + ++i) == true) { return this.a + i; } } } }

Bài Tập Java Có Lời Giải / 2023

Bài tập Java có lời giải

Bài này cung cấp cho bạn danh sách các dạng bài tập khác nhau để bạn thực hành khi học java.

1. Bài tập java cơ bản

Trong phần này, bạn phải nắm được các kiến thức về:

Các mệnh đề if-else, switch-case.

Các vòng lặp for, while, do-while.

Các từ khóa break và continue trong java.

Các toán tử trong java.

Mảng (array) trong java.

File I/O trong java.

Xử lý ngoại lệ trong java.

Bài 01:

Viết chương trình tìm tất cả các số chia hết cho 7 nhưng không phải bội số của 5, nằm trong đoạn 10 và 200 (tính cả 10 và 200). Các số thu được sẽ được in thành chuỗi trên một dòng, cách nhau bằng dấu phẩy.

package vn.viettuts.baitap; import java.util.ArrayList; import java.util.List; public class Bai01 { public static void main(String[] args) { for (int i = 10; i < 201; i++) { if ((i % 7 == 0) && (i % 5 != 0)) { list.add(i); } } showList(list); } if (list != null && !list.isEmpty()) { int size = list.size(); for (int i = 0; i < size - 1; i++) { System.out.print(list.get(i) + ", "); } System.out.println(list.get(size - 1)); } } }

Kết quả:

14, 21, 28, 42, 49, 56, 63, 77, 84, 91, 98, 112, 119, 126, 133, 147, 154, 161, 168, 182, 189, 196

Bài 02:

Viết một chương trình tính giai thừa của một số nguyên dương n. Với n được nhập từ bàn phím. Ví dụ, n = 8 thì kết quả đầu ra phải là 1*2*3*4*5*6*7*8 = 40320.

Sử dụng đệ quy hoặc vòng lặp để tính giai thừa.

Code mẫu: sử dụng đệ quy

package vn.viettuts.baitap; import java.util.Scanner; public class GiaiThuaDemo2 { private static Scanner scanner = new Scanner(System.in); /** * main * * @author viettuts.vn * @param args */ public static void main(String[] args) { System.out.print("Nhập số nguyên dương n = "); int n = scanner.nextInt(); System.out.println("Giai thừa của " + n + " là: " + tinhGiaithua(n)); } /** * tinh giai thua * * @author viettuts.vn * @param n: so nguyen duong * @return giai thua cua so n */ public static long tinhGiaithua(int n) { return n * tinhGiaithua(n - 1); } else { return 1; } } }

Kết quả:

Nhập số nguyên dương n = 8 Giai thừa của 8 là: 40320

Bài 03:

Hãy viết chương trình để tạo ra một map chứa (i, i*i), trong đó i là số nguyên từ 1 đến n (bao gồm cả 1 và n), n được nhập từ bàn phím. Sau đó in map này ra màn hình. Ví dụ: Giả sử số n là 8 thì đầu ra sẽ là: {1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64}.

Sử dụng vòng lặp for để lặp i từ 1 đến n.

package vn.viettuts.baitap; import java.util.HashMap; import java.util.Map; import java.util.Scanner; public class Bai03 { private static Scanner scanner = new Scanner(System.in); public static void main(String[] args) { System.out.print("Nhập số nguyên dương n = "); int n = scanner.nextInt(); for (int i = 1; i < n + 1; i++) { map.put(i, i * i); } System.out.println(map); } }

Kết quả:

Nhập số nguyên dương n = 10 {1=1, 2=4, 3=9, 4=16, 5=25, 6=36, 7=49, 8=64, 9=81, 10=100}

Bài 04:

Viết chương trình giải phương trình bậc 2: ax2 + bx + c = 0.

package vn.viettuts.baitap; import java.util.Scanner; /** * Giải phương trình bậc 2 * * @author viettuts.vn */ public class PhuongTrinhBac2 { private static Scanner scanner = new Scanner(System.in); /** * main * * @param args */ public static void main(String[] args) { System.out.print("Nhập hệ số bậc 2, a = "); float a = scanner.nextFloat(); System.out.print("Nhập hệ số bậc 1, b = "); float b = scanner.nextFloat(); System.out.print("Nhập hằng số tự do, c = "); float c = scanner.nextFloat(); giaiPTBac2(a, b, c); } /** * Giải phương trình bậc 2: ax2 + bx + c = 0 * * @param a: hệ số bậc 2 * @param b: hệ số bậc 1 * @param c: số hạng tự do */ public static void giaiPTBac2(float a, float b, float c) { if (a == 0) { if (b == 0) { System.out.println("Phương trình vô nghiệm!"); } else { System.out.println("Phương trình có một nghiệm: " + "x = " + (-c / b)); } return; } float delta = b*b - 4*a*c; float x1; float x2; x1 = (float) ((-b + Math.sqrt(delta)) / (2*a)); x2 = (float) ((-b - Math.sqrt(delta)) / (2*a)); System.out.println("Phương trình có 2 nghiệm là: " + "x1 = " + x1 + " và x2 = " + x2); } else if (delta == 0) { x1 = (-b / (2 * a)); System.out.println("Phương trình có nghiệm kép: " + "x1 = x2 = " + x1); } else { System.out.println("Phương trình vô nghiệm!"); } } }

Kết quả:

Nhập hệ số bậc 2, a = 2 Nhập hệ số bậc 1, b = 1 Nhập hằng số tự do, c = -1 Phương trình có 2 nghiệm là: x1 = 0.5 và x2 = -1.0

Bài 05:

Tham khảo bảng ASCII để chuyển đổi kiểu char thành String. Hàm chr(55 + m) trong ví dụ sau:

Nếu m = 10 trả về chuỗi “A”.

Nếu m = 11 trả về chuỗi “B”.

Nếu m = 12 trả về chuỗi “C”.

Nếu m = 13 trả về chuỗi “D”.

Nếu m = 14 trả về chuỗi “E”.

Nếu m = 15 trả về chuỗi “F”.

package vn.viettuts.baitap; import java.util.Scanner; public class ConvertNumber { public static final char CHAR_55 = 55; private static Scanner scanner = new Scanner(System.in); /** * main * * @author viettuts.vn * @param args */ public static void main(String[] args) { System.out.print("Nhập số nguyên dương n = "); int n = scanner.nextInt(); System.out.println("So " + n + " trong he co so 2 = " + ConvertNumber.convertNumber(n, 2)); System.out.println("So " + n + " trong he co so 16 = " + ConvertNumber.convertNumber(n, 16)); } /** * chuyen doi so nguyen n sang he co so b * * @author viettuts.vn * @param n: so nguyen * @param b: he co so * @return he co so b */ public static String convertNumber(int n, int b) { return ""; } StringBuilder sb = new StringBuilder(); int m; int remainder = n; m = remainder % b; sb.append((char) (CHAR_55 + m)); } else { sb.append(m); } } else { sb.append(remainder % b); } remainder = remainder / b; } return sb.reverse().toString(); } }

Kết quả:

Nhập số nguyên dương n = 15 So 15 trong he co so 2 = 1111 So 15 trong he co so 16 = F

Bài 06:

package vn.viettuts.baitap; import java.util.Scanner; /** * Tính dãy số Fibonacci bằng phương pháp đệ quy * * @author viettuts.vn */ public class FibonacciExample2 { private static Scanner scanner = new Scanner(System.in); /** * main * * @param args */ public static void main(String[] args) { System.out.print("Nhập số nguyên dương n = "); int n = scanner.nextInt(); System.out.println(n + " số đầu tiên của dãy số fibonacci: "); for (int i = 0; i < n; i++) { System.out.print(fibonacci(i) + " "); } } /** * Tính số fibonacci thứ n * * @param n: chỉ số của số fibonacci tính từ 0 * vd: F0 = 0, F1 = 1, F2 = 1, F3 = 2 * @return số fibonacci thứ n */ public static int fibonacci(int n) { if (n < 0) { return -1; return n; } else { return fibonacci(n - 1) + fibonacci(n - 2); } } }

Kết quả:

Nhập số nguyên dương n = 12 12 số đầu tiên của dãy số fibonacci: 0 1 1 2 3 5 8 13 21 34 55 89

Bài 07:

Viết chương trình tìm ước số chung lớn nhất (USCLN) và bội số chung nhỏ nhất (BSCNN) của hai số nguyên dương a và b nhập từ bàn phím.

package vn.viettuts.baitap; import java.util.Scanner; public class USCLL_BSCNN_1 { private static Scanner scanner = new Scanner(System.in); /** * main * * @param args */ public static void main(String[] args) { System.out.print("Nhập số nguyên dương a = "); int a = scanner.nextInt(); System.out.print("Nhập số nguyên dương b = "); int b = scanner.nextInt(); System.out.println("USCLN của " + a + " và " + b + " là: " + USCLN(a, b)); System.out.println("BSCNN của " + a + " và " + b + " là: " + BSCNN(a, b)); } /** * Tìm ước số chung lớn nhất (USCLN) * * @param a: số nguyên dương * @param b: số nguyên dương * @return USCLN của a và b */ public static int USCLN(int a, int b) { if (b == 0) return a; return USCLN(b, a % b); } /** * Tìm bội số chung nhỏ nhất (BSCNN) * * @param a: số nguyên dương * @param b: số nguyên dương * @return BSCNN của a và b */ public static int BSCNN(int a, int b) { return (a * b) / USCLN(a, b); } }

Kết quả:

Nhập số nguyên dương a = 10 Nhập số nguyên dương b = 24 USCLN của 10 và 24 là: 2 BSCNN của 10 và 24 là: 120

Bài 08:

Viết chương trình liệt kê tất cả các số nguyên tố nhỏ hơn n. Số nguyên dương n được nhập từ bàn phím.

package vn.viettuts.baitap; import java.util.Scanner; /** * Chương trình liệt kê tất cả các số nguyên tố nhỏ hơn n. * * @author viettuts.vn */ public class BaiTap08 { private static Scanner scanner = new Scanner(System.in); /** * main * * @param args */ public static void main(String[] args) { System.out.print("Nhập n = "); int n = scanner.nextInt(); System.out.printf("Tất cả các số nguyên tố nhỏ hơn %d là: n", n); System.out.print(2); } for (int i = 3; i < n; i+=2) { if (isPrimeNumber(i)) { System.out.print(" " + i); } } } /** * check so nguyen to * * @author viettuts.vn * @param n: so nguyen duong * @return true la so nguyen so, * false khong la so nguyen to */ public static boolean isPrimeNumber(int n) { if (n < 2) { return false; } int squareRoot = (int) Math.sqrt(n); for (int i = 2; i <= squareRoot; i++) { if (n % i == 0) { return false; } } return true; } }

Kết quả:

Nhập n = 100 Tất cả các số nguyên tố nhỏ hơn 100 là: 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

Bài 09:

Viết chương trình liệt kê n số nguyên tố đầu tiên trong java. Số nguyên dương n được nhập từ bàn phím.

package vn.viettuts.baitap; import java.util.Scanner; /** * Chương trình liệt kê n số nguyên tố đầu tiên. * * @author viettuts.vn */ public class BaiTap09 { private static Scanner scanner = new Scanner(System.in); /** * main * * @param args */ public static void main(String[] args) { System.out.print("Nhập n = "); int n = scanner.nextInt(); System.out.printf("%d số nguyên tố đầu tiên là: n", n); int dem = 0; int i = 2; while (dem < n) { if (isPrimeNumber(i)) { System.out.print(i + " "); dem++; } i++; } } /** * check so nguyen to * * @author viettuts.vn * @param n: so nguyen duong * @return true la so nguyen so, * false khong la so nguyen to */ public static boolean isPrimeNumber(int n) { if (n < 2) { return false; } int squareRoot = (int) Math.sqrt(n); for (int i = 2; i <= squareRoot; i++) { if (n % i == 0) { return false; } } return true; } }

Kết quả:

Nhập n = 10 10 số nguyên tố đầu tiên là: 2 3 5 7 11 13 17 19 23 29

Bài 10:

Viết chương trình liệt kê tất cả số nguyên tố có 5 chữ số trong java.

package vn.viettuts.baitap; /** * Chương trình liệt kê tất cả số nguyên tố có 5 chữ số. * * @author viettuts.vn */ public class BaiTap10 { /** * main * * @param args */ public static void main(String[] args) { int count = 0; System.out.println("Liệt kê tất cả số nguyên tố có 5 chữ số:"); for (int i = 10001; i < 99999; i+=2) { if (isPrimeNumber(i)) { System.out.println(i); count++; } } System.out.println("Tổng các số nguyên tố có 5 chữ số là: " + count); } /** * check so nguyen to * * @author viettuts.vn * @param n: so nguyen duong * @return true la so nguyen so, * false khong la so nguyen to */ public static boolean isPrimeNumber(int n) { if (n < 2) { return false; } int squareRoot = (int) Math.sqrt(n); for (int i = 2; i <= squareRoot; i++) { if (n % i == 0) { return false; } } return true; } }

Kết quả:

Liệt kê tất cả số nguyên tố có 5 chữ số: 10007 10009 10037 ... 99971 99989 99991 Tổng các số nguyên tố có 5 chữ số là: 8363

Bài 11:

Viết chương trình phân tích số nguyên n thành các thừa số nguyên tố trong java. Ví dụ: 100 = 2x2x5x5.

package vn.viettuts.baitap; import java.util.ArrayList; import java.util.List; import java.util.Scanner; /** * Chương trình phân tích số nguyên n thành các thừa số nguyên tố. * Ví dụ: 12 = 2 x 2 x 3. * * @author viettuts.vn */ public class BaiTap11 { private static Scanner scanner = new Scanner(System.in); /** * main * * @param args */ public static void main(String[] args) { System.out.print("Nhập số nguyên dương n = "); int n = scanner.nextInt(); System.out.printf("Kết quả: %d = ", n); int size = listNumbers.size(); for (int i = 0; i < size - 1; i++) { System.out.print(listNumbers.get(i) + " x "); } System.out.print(listNumbers.get(size - 1)); } /** * Phân tích số nguyên thành tích các thừa số nguyên tố * * @param positiveInt * @return */ int i = 2; if (n % i == 0) { n = n / i; listNumbers.add(i); } else { i++; } } if (listNumbers.isEmpty()) { listNumbers.add(n); } return listNumbers; } }

Kết quả:

Nhập số nguyên dương n = 100 Kết quả: 100 = 2 x 2 x 5 x 5

Bài 12:

Viết chương trình tính tổng của các chữ số của môt số nguyên n trong java. Số nguyên dương n được nhập từ bàn phím. Với n = 1234, tổng các chữ số: 1 + 2 + 3 + 4 = 10

package vn.viettuts.baitap; import java.util.Scanner; /** * Chương trình tính tổng của các chữ số của môt số nguyên dương n. * Tổng của các chữ số của 6677 là 6 + 6 + 7 + 7 = 26. * * @author viettuts.vn */ public class BaiTap12 { private static Scanner scanner = new Scanner(System.in); public static int DEC_10 = 10; /** * main * * @param args */ public static void main(String[] args) { System.out.print("Nhập số nguyên dương n = "); int n = scanner.nextInt(); System.out.printf("Tổng của các chữ số " + "của %d là: %d", n, totalDigitsOfNumber(n)); } /** * Tính tổng của các chữ số của một số nguyên dương * * @param n: số nguyên dương * @return */ public static int totalDigitsOfNumber(int n) { int total = 0; do { total = total + n % DEC_10; n = n / DEC_10; return total; } }

Kết quả:

Nhập số nguyên dương n = 6677 Tổng của các chữ số của 6677 là: 26

Bài 13:

Viết chương trình kiểm tra một số n là số thuận nghịch trong java. Số nguyên dương n được nhập từ bàn phím.

package vn.viettuts.baitap; import java.util.Scanner; /** * Chương trình liệt kê tất cả các số thuận nghịch có 6 chữa số. * * @author viettuts.vn */ public class BaiTap13 { private static Scanner scanner = new Scanner(System.in); /** * main * * @param args */ public static void main(String[] args) { System.out.print("Nhập số nguyên dương n = "); int n = scanner.nextInt(); System.out.println(n + " là số thuận nghịch: " + isThuanNghich(n)); System.out.print("Nhập số nguyên dương m = "); int m = scanner.nextInt(); System.out.println(n + " là số thuận nghịch: " + isThuanNghich(m)); } /** * Kiểm tra số thuận nghịch * * @param n: số nguyên dương * @return true là số thuận nghịch * false không là số thuận nghịch */ public static boolean isThuanNghich(int n) { String numberStr = String.valueOf(n); int size = numberStr.length(); for (int i = 0; i < (size/2); i++) { if (numberStr.charAt(i) != numberStr.charAt(size - i - 1)) { return false; } } return true; } }

Kết quả:

Nhập số nguyên dương n = 123321 123321 là số thuận nghịch: true Nhập số nguyên dương m = 123451 123321 là số thuận nghịch: false

Bài 14:

Viết chương trình liệt kê các số Fibonacci nhỏ hơn n là số nguyên tố trong java. N là số nguyên dương được nhập từ bàn phím.

package vn.viettuts.baitap; import java.util.Scanner; /** * Chương trình liệt kê các số Fibonacci nhỏ hơn n là số nguyên tố. * Với n được nhập từ bàn phím. * * @author viettuts.vn */ public class BaiTap14 { private static Scanner scanner = new Scanner(System.in); /** * main * * @param args */ public static void main(String[] args) { System.out.print("Nhập số tự nhiên n = "); int n = scanner.nextInt(); System.out.printf("Các số fibonacci nhỏ hơn %d và " + "là số nguyên tố: ", n); int i = 0; while (fibonacci(i) < 100) { int fi = fibonacci(i); if (isPrimeNumber(fi)) { System.out.print(fi + " "); } i++; } } /** * Tính số fibonacci thứ n * * @param n: chỉ số của số fibonacci tính từ 0 * vd: F0 = 0, F1 = 1, F2 = 1, F3 = 2 * @return số fibonacci thứ n */ public static int fibonacci(int n) { if (n < 0) { return -1; return n; } else { return fibonacci(n - 1) + fibonacci(n - 2); } } /** * check so nguyen to * * @author viettuts.vn * @param n: so nguyen duong * @return true la so nguyen so, * false khong la so nguyen to */ public static boolean isPrimeNumber(int n) { if (n < 2) { return false; } int squareRoot = (int) Math.sqrt(n); for (int i = 2; i <= squareRoot; i++) { if (n % i == 0) { return false; } } return true; } }

Kết quả:

Nhập số tự nhiên n = 100 Các số fibonacci nhỏ hơn 100 và là số nguyên tố: 2 3 5 13 89

Các bài tập khác:

Viết chương trình nhập số nguyên dương n và thực hiện các chức năng sau: a) Tính tổng các chữ số của n. b) Phân tích n thành tích các thừa số nguyên tố. c) Liệt kê các ước số của n. d) Liệt kê các ước số là nguyên tố của n.

Viết chương trình liệt kệ các số nguyên có từ 5 đến 7 chữ số thảo mãn: a) Là số nguyên tố. b) Là số thuận nghịch. c) Mỗi chữ số đều là số nguyên tố. d) Tổng các chữ số là số nguyên tố.

Viết chương trình liệt kệ các số nguyên có 7 chữ số thảo mãn: a) Là số nguyên tố. b) Là số thuận nghịch. c) Mỗi chữ số đều là số nguyên tố. d) Tổng các chữ số là số thuận nghịch.

2. Bài tập chuỗi trong Java

Danh sách bài tập:

Nhập một sâu ký tự. Đếm số từ của sâu đó (mỗi từ cách nhau bởi một khoảng trắng có thể là một hoặc nhiều dấu cách, tab, xuống dòng). Ví dụ ” hoc java co ban den nang cao ” có 7 từ. Lời giải: Đếm số từ trong một chuỗi.

Nhập một sâu ký tự. Liệt kê số lần xuất hiện của các từ của sâu đó. Lời giải: Liệt kê số lần xuất hiện của các từ trong một chuỗi.

Nhập 2 sâu ký tự s1 và s2. Kiểm tra xem sâu s1 có chứa s2 không? Lời giải: Chuỗi chứa chuỗi trong java.

3. Bài tập mảng trong Java

Các bài tập trong phần này thao tác với mảng một chiều và 2 chiều trong java, bạn có thể tham khảo bài học mảng (Array) trong java

Danh sách bài tập:

Nhập một mảng số thực a0, a1, a2, …, an-1. Không dùng thêm mảng số thực nào khác (có thể dùng thêm mảng số nguyên), hãy in ra màn hình mảng trên theo thứ tự tăng dần.

Nhập 2 mảng số thực a0, a1, a2, …, am-1 và b0, b1, b2, …, bn-1. Giả sử 2 mảng này đã được sắp xếp tăng dần. Hãy tận dụng tính sắp xếp của 2 dãy và tạo dãy c0, c1, c2, …, cm+n-1 là hợp của 2 dãy trên sao cho ci cũng có thứ tự tăng dần. Lời giải: Trộn 2 mảng trong java

Viết chương trình nhập vào mảng A có n phần tử, các phần tử là số nguyên lớn hơn 0 và nhỏ hơn 100. Thực hiện các chức năng sau: a) Tìm phần tử lớn thứ nhất và lớn thứ 2 trong mảng với các chỉ số của chúng (chỉ số đầu tiên tìm được). b) Sắp xếp mảng theo thứ tự tăng dần. c) Nhập số nguyên x và chèn x vào mảng A sao cho vẫn đảm bảo tính tăng dần cho mảng A.

Viết chương trình nhập vào ma trận A có n dòng, m cột, các phần tử là số nguyên lớn hơn 0 và nhỏ hơn 100. Thực hiện các chức năng sau: a) Tìm phần tử lớn thứ nhất với chỉ số của nó (chỉ số đầu tiên tìm được). b) Tìm và in ra các phần tử là số nguyên tố của ma trận (các phần tử không nguyên tố thì thay bằng số 0). c) Sắp xếp tất cả các cột của ma trận theo thứ tự tăng dần và in kết quả ra màn hình. d) Tìm cột trong ma trận có nhiều số nguyên tố nhất.

4. Bài tập về các thuật toán sắp xếp trong Java

Bạn có thể xem các giải thuật sắp xếp trong phần cấu trúc dữ liệu và giải thuật: Giải thuật sắp xếp

5. Bài tập java nâng cao

Trong phần này, bạn phải nắm được các kiến thức về:

Lớp và đối tượng trong java.

Access modifier trong java

Các tính chất của lập trình hướng đối tượng (OOP).

Các khái niệm Java OOPs.

Collection trong java.

Xử lý ngoại lệ trong java.

Bài tập quản lý sinh viên trong Java – console

Đề bài: Viết chương trình quản lý sinh viên. Mỗi đối tượng sinh viên có các thuộc tính sau: id, name, age, address và gpa (điểm trung bình). Yêu cầu: tạo ra một menu với các chức năng sau:

/****************************************/ 1. Add student. 2. Edit student by id. 3. Delete student by id. 4. Sort student by gpa. 5. Sort student by name. 6. Show student. 0. Exit. /****************************************/

Lời giải: Bài tập quản lý sinh viên trong java – giao diện dòng lệnh

Bài tập quản lý sinh viên trong Java – Swing

Lời giải: Bài tập quản lý sinh viên trong java bằng Swing

Luyện Tập Về Thừa Kế Trong Java / 2023

   4. Luyện Tập về Thừa Kế Trong Java

4.1  Ex: The 

Circle

 and 

Cylinder

 Classes

Bài tập này sẽ hướng dẫn bạn thông qua các khái niệm quan trọng trong thừa kế.

Trong bài tập này, một lớp con được gọi 

Cylinder

là bắt nguồn từ siêu lớp 

Circle

như được hiển thị trong sơ đồ lớp (trong đó một mũi tên hướng lên từ lớp con đến siêu lớp của nó). 

Nghiên cứu cách lớp con 

Cylinder

gọi các hàm tạo của lớp cha (thông qua 

super()

và 

super(radius)

) và kế thừa các biến và phương thức từ lớp cha 

Circle

.

Bạn có thể sử dụng lại 

Circle

lớp mà bạn đã tạo trong bài tập trước. 

Đảm bảo rằng bạn giữ “ 

Circle.class

” trong cùng thư mục.

public class Cylinder extends Circle { private double height; public Cylinder() { super(); height = 1.0; } public Cylinder(double height) { super(); this.height = height; } public Cylinder(double radius, double height) { super(radius); this.height = height; } public double getHeight() { return height; } public double getVolume() { return getArea()*height; } }

Viết chương trình kiểm tra (

TestCylinder

) để kiểm tra lớp 

Cylinder

 đã tạo, như sau:

public class TestCylinder { public static void main (String[] args) { Cylinder c1 = new Cylinder(); System.out.println("Cylinder:" + " radius=" + c1.getRadius() + " height=" + c1.getHeight() + " base area=" + c1.getArea() + " volume=" + c1.getVolume()); Cylinder c2 = new Cylinder(10.0); System.out.println("Cylinder:" + " radius=" + c2.getRadius() + " height=" + c2.getHeight() + " base area=" + c2.getArea() + " volume=" + c2.getVolume()); Cylinder c3 = new Cylinder(2.0, 10.0); System.out.println("Cylinder:" + " radius=" + c3.getRadius() + " height=" + c3.getHeight() + " base area=" + c3.getArea() + " volume=" + c3.getVolume()); } }

Method Overriding and “Super”

:

 Lớp con 

lớp 

Cylinder

 kế thừa 

getArea()

phương thức từ Vòng tròn siêu lớp của nó. 

Hãy thử 

cách ghi đè

 các 

getArea()

phương pháp trong các lớp con 

Cylinder

để tính diện tích bề mặt (= 2π × bán kính × chiều cao + 2 × cơ sở khu vực) của xi lanh thay vì của vùng căn cứ. 

Đó là, nếu 

getArea()

được gọi bởi một 

Circle

thể hiện, nó trả về khu vực. 

Nếu 

getArea()

được gọi bởi một 

Cylinder

thể hiện, nó trả về diện tích bề mặt của hình trụ.

Nếu bạn ghi đè lên 

getArea()

trong lớp con 

Cylinder

, nó 

getVolume()

không còn hoạt động. 

Điều này là do 

getVolume()

sử dụng 

phương thức

 ghi đè 

được tìm thấy trong cùng một lớp. 

(Thời gian chạy Java sẽ chỉ tìm kiếm siêu lớp nếu nó không thể định vị phương thức trong lớp này). 

Sửa lỗi 

.

getArea()

getVolume()

Gợi ý: Sau khi ghi đè lên 

getArea()

lớp con 

Cylinder

, bạn có thể chọn gọi 

getArea()

siêu lớp 

Circle

bằng cách gọi 

super.getArea()

.

THỬ:

Cung cấp một 

toString()

phương thức cho 

Cylinder

lớp, ghi đè lên 

toString()

kế thừa từ siêu lớp 

Circle

, ví dụ:

cách ghi đè

@Override public String toString() { return "Cylinder: subclass of " + super.toString() + " height=" + height; }

Hãy thử 

toString()

phương pháp trong 

TestCylinder

.

Lưu ý: 

@Override

được gọi là 

chú thích

 (được giới thiệu trong JDK 1.5), yêu cầu trình biên dịch kiểm tra xem có phương thức nào như vậy trong siêu lớp được ghi đè không. 

Điều này giúp rất nhiều nếu bạn viết sai tên của 

toString()

Nếu 

@Override

không được sử dụng và 

toString()

bị sai chính tả 

ToString()

, nó sẽ được coi là một phương thức mới trong lớp con, thay vì ghi đè lên lớp cha. 

Nếu 

@Override

được sử dụng, trình biên dịch sẽ báo hiệu lỗi. 

@Override

chú thích là tùy chọn, nhưng chắc chắn tốt đẹp để có.

4.2 Ví dụ: Superclass 

Person

 và các lớp con của nó

4.3  Ex: 

Point2D

 and 

Point3D

4.4  Ex: 

Point

 and 

MovablePoint

4.5  Ex: Superclass 

Shape

 and its subclasses 

Circle

Rectangle

 and 

Square

Viết một siêu lớp được gọi 

Shape

(như thể hiện trong sơ đồ lớp), chứa:

Hai biến đối tượng 

color

String

) và 

filled

boolean

).

Hai hàm tạo: một hàm tạo không có đối số (không đối số) khởi tạo 

color

thành “xanh” và 

filled

đến 

true

và một hàm tạo khởi tạo 

color

và 

filled

cho các giá trị đã cho.

Getter và setter cho tất cả các biến thể hiện. 

Theo quy ước, getter cho một 

boolean

biến 

xxx

được gọi 

isXXX()

(thay vì 

getXxx()

cho tất cả các loại khác).

Một 

toString()

phương thức trả về “ 

A Shape with color of xxx and filled/Not filled

“.

Viết chương trình kiểm tra để kiểm tra tất cả các phương thức được định nghĩa trong 

Shape

.

Viết hai lớp con 

Shape

được gọi 

Circle

và 

Rectangle

, như thể hiện trong sơ đồ lớp.

Các 

Circle

lớp học bao gồm:

Một biến đối tượng 

radius

double

).

Ba Constructor như hình. Trong constructor

 không có đối số thì khởi tạo bán kính tới 

1.0

.

Getter và setter cho biến thể hiện (instance variable) 

radius

.

Phương thức 

getArea()

và 

getPerimeter()

.

Ghi đè 

toString()

phương thức được kế thừa, để trả về “ 

A Circle with radius=xxx, which is a subclass of yyy

“, đây 

yyy

là đầu ra của 

toString()

phương thức từ lớp cha.

Các lớp 

Rectangle

 bao gồm:

Hai biến đối tượng 

width

double

) và 

length

double

).

Ba Constructor như hình. Trong constructor

 không có đối số 

khởi tạo 

width 

và 

length 

bằng 

1.0

.

Getter và setter cho tất cả các biến thể hiện.

Phương thức 

getArea()

và 

getPerimeter()

.

Ghi đè 

toString()

phương thức được kế thừa, để trả về “ 

A Rectangle with width=xxx and length=zzz, which is a subclass of yyy

“, đây 

yyy 

là đầu ra của 

toString()

phương thức từ lớp cha.

Viết một lớp được gọi 

Square

, như là một lớp con của 

Rectangle

Tự thuyết phục bản thân 

Square 

có thể được mô hình hóa như là một lớp con của 

Rectangle

Square 

không có biến đối tượng, nhưng kế thừa chiều rộng và chiều dài của biến đối tượng từ hình chữ nhật siêu lớp của nó.

Cung cấp các constructor thích hợp (như thể hiện trong sơ đồ lớp). 

Dấu:

public Square(double side) { super(side, side); }

Ghi đè 

toString()

phương thức để trả về “ 

A Square with side=xxx, which is a subclass of yyy

“, đây 

yyy

là đầu ra của 

toString()

phương thức từ lớp cha.

Bạn có cần ghi đè lên 

getArea()

và 

getPerimeter()

Thử chúng và in ra kết quả 😉

Ghi đè 

setLength()

và 

setWidth()

thay đổi cả 

width

và 

length

, để duy trì hình dạng vuông.

5.  Exercises on Composition vs Inheritance

Chúng có hai cách để sử dụng lại một lớp trong các ứng dụng của bạn: 

thành phần

 và 

kế thừa

 .

5.1  Ex: The 

Point

 and 

Line

 Classes

Chúng ta hãy bắt đầu với 

thành phần

 với tuyên bố “một dòng gồm hai điểm”.

Hoàn thành định nghĩa của hai lớp sau: 

Point

và 

Line

Lớp 

Line

bao gồm 2 trường hợp của lớp 

Point

, đại diện cho điểm bắt đầu và điểm kết thúc của dòng. 

Cũng viết các lớp kiểm tra cho 

Point

và 

Line

(nói 

TestPoint

và 

TestLine

).

public class Point { private int x; private int y; public Point (int x, int y) {......} public String toString() { return "Point: (" + x + "," + y + ")"; } public int getX() {......} public int getY() {......} public void setX(int x) {......} public void setY(int y) {......} public void setXY(int x, int y) {......} } public class TestPoint { public static void main(String[] args) { Point p1 = new Point(10, 20); System.out.println(p1); ...... } } public class Line { private Point begin; private Point end; public Line (Point begin, Point end) { this.begin = begin; ...... } public Line (int beginX, int beginY, int endX, int endY) { begin = new Point(beginX, beginY); ...... } public String toString() { ...... } public Point getBegin() { ...... } public Point getEnd() { ...... } public void setBegin(......) { ...... } public void setEnd(......) { ...... } public int getBeginX() { ...... } public int getBeginY() { ...... } public int getEndX() { ...... } public int getEndY() { ...... } public void setBeginX(......) { ...... } public void setBeginY(......) { ...... } public void setBeginXY(......) { ...... } public void setEndX(......) { ...... } public void setEndY(......) { ...... } public void setEndXY(......) { ...... } public int getLength() { ...... } public double getGradient() { ...... } } public class TestLine { public static void main(String[] args) { Line l1 = new Line(0, 0, 3, 4); System.out.println(l1); Point p1 = new Point(...); Point p2 = new Point(...); Line l2 = new Line(p1, p2); System.out.println(l2); ... } }

Sơ đồ lớp cho 

thành phần

 như sau (trong đó một mũi tên đầu kim cương rỗng chỉ vào thành phần của nó):

Thay vì 

thành phần

 , chúng ta có thể thiết kế một 

Line

lớp bằng cách sử dụng 

inheritance

Thay vì “một dòng gồm hai điểm”, chúng ta có thể nói rằng “một dòng là một điểm được mở rộng bởi một điểm khác”, như thể hiện trong sơ đồ lớp sau:

Chúng ta hãy thiết kế lại 

Line

lớp (được gọi 

LineSub

) là một lớp con của lớp 

Point

LineSub

kế thừa điểm bắt đầu từ siêu lớp của nó 

Point

và thêm điểm kết thúc. 

Hoàn thành định nghĩa lớp. 

Viết một lớp kiểm tra được gọi 

TestLineSub

để kiểm tra 

LineSub

.

public class LineSub extends Point { Point end; public LineSub (int beginX, int beginY, int endX, int endY) { super(beginX, beginY); chúng tôi = new Point(endX, endY); } public LineSub (Point begin, Point end) { super(begin.getX(), begin.getY()); chúng tôi = end; } public String toString() { ... } public Point getBegin() { ... } public Point getEnd() { ... } public void setBegin(...) { ... } public void setEnd(...) { ... } public int getBeginX() { ... } public int getBeginY() { ... } public int getEndX() { ... } public int getEndY() { ... } public void setBeginX(...) { ... } public void setBeginY(...) { ... } public void setBeginXY(...) { ... } public void setEndX(...) { ... } public void setEndY(...) { ... } public void setEndXY(...) { ... } public int getLength() { ... } public double getGradient() { ... } }

Tóm tắt: Có hai cách tiếp cận mà bạn có thể thiết kế một dòng, 

composition 

hoặc 

inheritance

“Một dòng gồm hai điểm” hoặc “Một dòng là một điểm được mở rộng bằng một điểm khác”. 

So sánh 

Line

và 

LineSub 

thiết kế: 

Line 

sử dụng 

thành phần

 và 

LineSub 

sử dụng 

kế thừa

 . 

Thiết kế nào tốt hơn?

5.2  Ex: The 

Circle

 and 

Cylinder

 Classes Using Composition

Hãy thử viết lại 

Circle-Cylinder

các bài tập trước sử dụng 

thành phần

 (như thể hiện trong sơ đồ lớp) thay vì 

thừa kế

 . 

Đó là, “một hình trụ bao gồm một vòng tròn cơ sở và chiều cao”.

public class Cylinder { private Circle base; private double height; public Cylinder() { base = new Circle(); height = 1.0; } ...... }

Thiết kế nào (kế thừa hoặc thành phần) là tốt hơn?

Bạn đang xem bài viết Java: Bài Tập Phần Class / 2023 trên website Caffebenevietnam.com. Hy vọng những thông tin mà chúng tôi đã chia sẻ là hữu ích với bạn. Nếu nội dung hay, ý nghĩa bạn hãy chia sẻ với bạn bè của mình và luôn theo dõi, ủng hộ chúng tôi để cập nhật những thông tin mới nhất. Chúc bạn một ngày tốt lành!