Cập nhật nội dung chi tiết về Luyện Tập Về Thừa Kế Trong Java mới nhất trên website Asianhubjobs.com. Hy vọng thông tin trong bài viết sẽ đáp ứng được nhu cầu ngoài mong đợi của bạn, chúng tôi sẽ làm việc thường xuyên để cập nhật nội dung mới nhằm giúp bạn nhận được thông tin nhanh chóng và chính xác nhất.
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?
Java: Bài Tập Phần Thừa Kế
Bài tập 1: HỆ THỐNG QUẢN LÝ NHÂN SỰ
Câu 1:
Tạo lớp Person chứa thông tin
– Tên
– Giới tính
– Ngày sinh
– Địa chỉ
Với đầy đủ hàm get set, constructor không tham số, constructor đầy đủ tham số
1. Viết phương thức inputInfo(), nhập thông tin Person từ bàn phím
2. Viết phương thức showInfo(), hiển thị tất cả thông tin Person
Câu 2:
Tạo lớp Student thừa kế Person, 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
– Email: phải chứa kí tự @ và không tồn tại khoảng trắng
1. Override phương thức inputInfo(), nhập thông tin Student từ bàn phím
2. Override phương thức showInfo(), hiển thị tất cả thông tin Student
3. 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
Câu 3:
Tạo lớp StudentTest, chứa Main kiểm tra chức năng lớp Student
Tạo Menu chọn như sau
a. Chọn 1: Nhập vào n sinh viên (n là số lượng sinh viên, được nhập từ bàn phím)
b. Chọn 2: Hiển thị thông tin tất cả các sinh viên ra màn hình
c. Chọn 3: Hiển thị sinh viên có điểm trung bình cao nhất và sinh viên có điểm trung bình thấp nhất
d. Chọn 4: Tìm kiếm sinh viên theo mã sinh viên. Nhập vào mã sinh viên. Nếu tồn tại sinh viên
có mã đó thì in ra màn hình thông tin sinh viên. Nếu không tồn tại thì in ra: Không có sinh
f. Chọn 6: Hiển thị tất cả các sinh viên được học bổng, và sắp xếp theo thứ tự điểm cao xuống thấp
g. Chọn 7: Thoát
Câu 4:
Tạo lớp Teacher, kế thừa từ Person, lưu trữ thông tin một giảng viên
– Lớp dạy (phải bắt đầu bằng 1 trong các chữ: G, H, I, K, L, M)
– Lương một giờ dạy
– Số giờ dạy trong tháng
1. Override phương thức inputInfo(), nhập thông tin Teacher từ bàn phím
2. Override phương thức showInfo(), hiển thị tất cả thông tin Teacher
3. Viết phương thức tính lương thực nhận, trả về lương thực nhận theo công thức:
Nếu lớp dạy là lớp buổi sáng và chiều (Giờ G, H, I, K) thì
Lương thực nhận = lương một giờ dạy * số giờ dạy trong tháng;
Nếu lớp dạy là lớp buổi tối (Giờ L, giờ M) thì
Lương thực nhân = lương một giờ dạy * số giờ dạy trong tháng + 200000đ;
Câu 5:
Tạo lớp TeacherTest, chứa hàm Main kiểm tra chức năng của Teacher
Tạo menu lựa chọn như sau:
a. Chọn 1: Nhập vào n giảng viên (n là số lượng sinh viên, được nhập từ bàn phím)
b. Chọn 2: Hiển thị thông tin tất cả các giảng viên ra màn hình
c. Chọn 3: Hiển thị giảng viên có lương cao nhất
d. Chọn 4: Thoát
Bài tập 2: HỆ THỐNG QUẢN LÝ SỞ THÚ
1. Tạo lớp có tên Animal gồm các thuộc tính và phương thức:
· String Ten
· int Tuoi
· String MoTa
· void xemThongTin()
· abstract void tiengKeu()
2. Tạo một số hàm tạo cho lớp Animal như sau:
· 0 tham số
· 1 tham số (Ten),
· 2 tham số (Ten, Tuoi),
· 3 tham số (Ten, Tuoi, MoTa).
3. Tạo các lớp Tiger, Dog, Cat theo các yêu cầu sau:
Thừa kế từ lớp Animal
Ghi đè phương thức tiengKeu() để thể hiện những tiếng kêu đặc trưng của từng loài vật
Thực thi các hàm tạo sử dụng từ khóa super
4. Tạo lớp có tên Chuong gồm:
· int maChuong
· ArrayList AnimalList
· void themConVat(Animal a)
· void xoaConVat(String ten)
5. Tạo lớp có tên Zoo gồm:
· ArrayList DanhSachChuong
· void themChuong(Chuong c)
· void xoaChuong(int machuong)
6. Tạo lớp có tên TestZoo chứa phương thức main() để quản lý sở thú theo dạng Menu như sau:
Thêm chuồng
Xóa chuồng
Thêm con vật
Xóa con vật
Xem tất cả các con vật
Thoát
7. Khi người dùng chọn 3 thì yêu cầu người dùng nhập vào loại con vật muốn thêm (Tiger, Dog, Cat) rồi nhập các thông tin của con vật và thêm vào AnimaList.
8. Khi người dùng chọn 5 thì hiển thị thông tin cùng tiếng kêu của từng con vật trong sở thú.
Bài tập 3: HỆ THỐNG QUẢN LÝ THƯ VIỆN
Ở một thư viện, người ta quản lý sách thông qua phần mềm.
Sách được đặt trên từng kệ sách (mỗi kệ sách bao gồm nhiều cuốn sách). Mỗi kệ sách có 1 số thứ tự riêng.
Các kệ sách được phân ra theo đầu mục sách như: Công nghệ thông tin, truyện ngắn, sách giáo khoa, tiểu thuyết…
Mỗi quyển sách lại được đánh một mã khác nhau.
Trên phần mềm có lưu trữ thêm thông tin về tác giả, năm xuất bản, giá tiền của sách
Một đặc trưng nữa của phần mềm, đấy là có thể lấy ra cuốn sách có giá cao nhất và cuốn sách có giá thấp nhất theo từng kệ sách, chỉ cần nhập vào số thứ tự kệ sách.
Để tìm kiếm đúng cuốn sách cần thiết, người dùng chỉ cần nhập vào mã sách là phần mềm sẽ trả về thông tin cuốn sách tương ứng.
Hãy viết phần mềm quản lý thư viện theo mô tả như trên.
Giải Phương Trình Bậc Nhất Trong Java
Ví dụ: Chương trình giải phương trình bậc nhất trong Java.
Chúng ta sẽ yêu cầu người dùng nhập vào hai hệ số a và b khi đó phương trình có dạng ax + b = 0, sau đó xét điều kiện cho a và b
Nếu a = 0 thì phương trình có hai trường hợp đó là:
Trường hợp 1: Phương trình có vô số nghiệm khi a = 0 và b = 0.
Trường hợp 2: Phương trình vô nghiệm khi a = 0 và b != 0.
Nếu a != 0 thì nghiệm của phương trình sẽ bằng -b / a.
import java.util.Scanner; import java.text.DecimalFormat; public class GiaiPTBacNhat { public static void main(String[] args) { int aNumber, bNumber; double nghiem; DecimalFormat decimalFormat = new DecimalFormat("#.##"); Scanner scanner = new Scanner(System.in); System.out.println("Nhập vào số a: "); aNumber = scanner.nextInt(); System.out.println("Nhập vào số b: "); bNumber = scanner.nextInt(); System.out.println("Phương trình bạn vừa nhập vào là: " + aNumber + "x + " + bNumber + " = 0."); if (aNumber == 0) { if (bNumber == 0) { System.out.println("Phương trình này có vô số nghiệm."); } else { System.out.println("Phương trình vô nghiệm."); } } else { nghiem = (double) -bNumber / aNumber; System.out.println("Phương trình có nghiệm x = " + decimalFormat.format(nghiem) + "."); } System.out.println("Chương trình này được đăng tại Freetuts.net"); } }Giải Phương Trình Bậc 2 Trong Java Swing
Đề bài
Viết chương trình giải phương trình bậc 2 trong java sử dụng Swing. Phương trình bậc 2 có dạng:
Lời giải
Thay vì sử dụng java.util.Scanner như trong bài giải phương trình bậc 2 trong java, bài này chúng ta sẽ sử dụng Swing để tạo giao diện window như sau:
Bài này được viết trên eclipse, bạn có thể tham khảo bài tạo chương trình java đầu tiên trên eclipse.
Tạo 3 lớp như sau:
PTB2View.java: lớp này extends lớp JFrame được sử dụng để tạo giao diện window.
PTB2.java: lớp này chứa hàm main() để khởi chạy chương trình.
Lớp PTB2View.java
package vn.viettuts.swing.ptb2; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JTextArea; import javax.swing.JTextField; public class PTB2View extends JFrame { private JTextField textFieldA; private JTextField textFieldB; private JTextField textFieldC; private JButton btnKetQua; private JTextArea textArea; public PTB2View() { setTitle("Java Swing - giải phương trình bậc 2"); JLabel labelHangSo = new JLabel("Hằng số:"); JLabel labelHangSoA = new JLabel("a:"); JLabel labelHangSoB = new JLabel("b:"); JLabel labelHangSoC = new JLabel("c:"); labelHangSo.setBounds(20, 20, 50, 20); labelHangSoA.setBounds(20, 50, 30, 20); labelHangSoB.setBounds(100, 50, 30, 20); labelHangSoC.setBounds(180, 50, 30, 20); textFieldA = new JTextField(); textFieldB = new JTextField(); textFieldC = new JTextField(); textFieldA.setBounds(40, 50, 40, 20); textFieldB.setBounds(120, 50, 40, 20); textFieldC.setBounds(200, 50, 40, 20); btnKetQua = new JButton("Kết Quả"); btnKetQua.setBounds(20, 80, 80, 30); textArea = new JTextArea(); textArea.setBounds(20, 120, 350, 150); add(labelHangSo); add(labelHangSoA); add(textFieldA); add(labelHangSoB); add(textFieldB); add(labelHangSoC); add(textFieldC); add(btnKetQua); add(textArea); setLayout(null); setSize(450, 400); setVisible(true); } public JTextField getTextFieldA() { return textFieldA; } public void setTextFieldA(JTextField textFieldA) { this.textFieldA = textFieldA; } public JTextField getTextFieldB() { return textFieldB; } public void setTextFieldB(JTextField textFieldB) { this.textFieldB = textFieldB; } public JTextField getTextFieldC() { return textFieldC; } public void setTextFieldC(JTextField textFieldC) { this.textFieldC = textFieldC; } public JButton getBtnKetQua() { return btnKetQua; } public void setBtnKetQua(JButton btnKetQua) { this.btnKetQua = btnKetQua; } public JTextArea getTextArea() { return textArea; } public void setTextArea(JTextArea textArea) { this.textArea = textArea; } }Lớp PTB2Controller.java
package vn.viettuts.swing.ptb2; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.JOptionPane; public class PTB2Controller implements ActionListener { private PTB2View view; private float hangsoA; private float hangsoB; private float hangsoC; public PTB2Controller(PTB2View view) { chúng tôi = view; view.getBtnKetQua().addActionListener(this); view.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { System.exit(1); } }); } /** * 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 */ private static String giaiPTBac2(float a, float b, float c) { String ketqua = null; if (a == 0) { if (b == 0) { ketqua = "Phương trình vô nghiệm!"; } else { ketqua = "Phương trình có một nghiệm: " + "x = " + (-c / b); } } 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)); ketqua = "Phương trình có 2 nghiệm là: " + "x1 = " + x1 + " và x2 = " + x2; } else if (delta == 0) { x1 = (-b / (2 * a)); ketqua = "Phương trình có nghiệm kép: " + "x1 = x2 = " + x1; } else { ketqua = "Phương trình vô nghiệm!"; } return ketqua; } private boolean validateHangSoA() { boolean isValid = false; try { if (!"".equals(view.getTextFieldA().getText())) { hangsoA = Float.parseFloat(view.getTextFieldA().getText()); isValid = true; } else { JOptionPane.showMessageDialog(view, "Hằng số a không được trống."); } } catch (NumberFormatException ex) { ex.printStackTrace(); JOptionPane.showMessageDialog(view, "Hằng số a không hợp lệ."); } return isValid; } private boolean validateHangSoB() { boolean isValid = false; try { if (!"".equals(view.getTextFieldB().getText())) { hangsoB = Float.parseFloat(view.getTextFieldB().getText()); isValid = true; } else { JOptionPane.showMessageDialog(view, "Hằng số b không được trống."); } } catch (NumberFormatException ex) { ex.printStackTrace(); JOptionPane.showMessageDialog(view, "Hằng số b không hợp lệ."); } return isValid; } private boolean validateHangSoC() { boolean isValid = false; try { if (!"".equals(view.getTextFieldC().getText())) { hangsoC = Float.parseFloat(view.getTextFieldC().getText()); isValid = true; } else { JOptionPane.showMessageDialog(view, "Hằng số c không được trống."); } } catch (NumberFormatException ex) { ex.printStackTrace(); JOptionPane.showMessageDialog(view, "Hằng số c không hợp lệ."); } return isValid; } @Override public void actionPerformed(ActionEvent e) { if (validateHangSoA() && validateHangSoB() && validateHangSoC()) { view.getTextArea().setText(giaiPTBac2(hangsoA, hangsoB, hangsoC)); } else { view.getTextArea().setText(""); } } public PTB2View getView() { return view; } public void setView(PTB2View view) { chúng tôi = view; } }Lớp PTB2.java
package vn.viettuts.swing.ptb2; public class PTB2 { public static void main(String[] args) { PTB2View view = new PTB2View(); PTB2Controller controller = new PTB2Controller(view); } }Kết quả:
Hiển thị ban đầu:
Nhập giá trị đúng cho các hằng số:
Nhập hằng số a không hợp lệ.
Không nhập hằng số a.
Bạn đang đọc nội dung bài viết Luyện Tập Về Thừa Kế Trong Java trên website Asianhubjobs.com. Hy vọng một phần nào đó những thông tin mà chúng tôi đã cung cấp là rất hữu ích với bạn. Nếu nội dung bài viết 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!