Tải bản đầy đủ (.pdf) (8 trang)

Bài tập java cơ bản có lời giải

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 (411.13 KB, 8 trang )

Môn học: Lập trình Java
Bài thực hành số 3: Kết tập, kế thừa và đa hình
Bài 1) Lấy kết quả lớp Point trong bài thực hành 2. Tạo một lớp tứ giác Quadrangle trong gói
com.bean gồm 4 đối tượng của lớp Point (p1, p2, p3, p4 theo thứ tự các điểm trong tứ giác).
a) Viết các phương thức get/set cho lớp Quadrangle
b) Viết các phương thức khởi tạo sau:
i) Phương thức khởi tạo không có tham số nào: Các điểm được khởi tạo mặc định như
sau: A(0,0), B(0,1), C(1,1), D(1,0).
ii) Phương thức khởi tạo nhận 4 đối tượng thuộc lớp Point làm tham số
c) Viết phương thức nhập vào tứ giác từ bàn phím: Nhập từng điểm một theo thứ tự của các
điểm trong tứ giác. Chú ý nhập bằng phương thức JOptionPane.showInputDialog(), có
sử dụng Exception để kiểm tra liệu người dùng có nhập chữ vào hay không.
public void nhap(){…}

d) Viết phương thức hiển thị thông tin tứ giác bao gồm loại, tên tứ giác và tọa độ các đỉnh:
Ví dụ: ABCD: A(0,0), B(0,1), C(1,1), D(1,0).
public void hienThi(){…}

e) Viết phương thức lấy về tên đối tượng của lớp Quadrangle như sau:
public String getName(){
return “Tu giac”;
}

f) Chỉnh sửa lớp Quadrangle thành 1 lớp trừu tượng (abstract). Viết phương thức trừu
tượng tính diện tích cho lớp Quadrangle có chữ ký như sau:
public abstract double getArea();

g) Viết hàm main cho lớp TestQuad kiểm tra các phương thức đã cài đặt cho lớp như sau:
package com.test;
import com.bean.*;
public class TestQuad {


public static void main(String[] args) {
//Goi ham khoi tao khong tham so
Quadrangle q1 = new Quadrangle();
q1.hienThi();
Point p1 = new Point(0, 2);
Point p2 = new Point(0, 3);
Point p3 = new Point(4, 3);
1


Point p4 = new Point(2, 2);
//Goi ham khoi tao 4 tham so
Quadrangle q2 = new Quadrangle(p1, p2, p3, p4);
q2.hienThi();
Quadrangle q3 = new Quadrangle();
q3.nhap();
q3.hienThi();
}
}

Bài 2) Tạo một lớp hình vuông Square trong gói com.bean thừa từ lớp Quadrangle ở trên
gồm 1 thuộc tính tâm đối xứng là đối tượng của lớp Point (tamDX).
a) Viết các phương thức set/get cho các thuộc tính của lớp Square.
b) Xây dựng 2 phương thức khởi tạo: Sau khi khởi tạo cho 4 đỉnh, tiến hành tính toán tọa
độ cho tâm đối xứng và khởi tạo cho thuộc tính tamDX ở trên.
Một phương thức không có tham số. Các điểm được khởi tạo mặc định như sau:
A(0,0), B(0,1), C(1,1), D(1,0).
Một phương thức nhận 4 đối tượng thuộc lớp Point làm tham số.
c) Viết lại phương thức lấy về tên đối tượng của lớp Square như sau:
public String getName(){

return “Hinh vuong voi tam doi xung la: ”
+ tamDX.getTenDiem() + “(”
+ tamDX.getTungDo() + “,”
+ tamDX.getHoanhDo() + “)”;
}

d) Cài đặt cụ thể cho phương thức tính diện tích kế thừa từ lớp Quadrangle theo công
thức tính diện tích hình vuông.
e) Viết hàm main của lớp TestSquare thực hiện các lệnh để kiểm tra các phương thức
của lớp đã xây dựng như sau:
package com.test;
import javax.swing.JOptionPane;
import com.bean.*;
public class TestSquare {
public static void main(String[] args) {
//Goi ham khoi tao khong tham so
Square s1 = new Square();
s1.setP3(new Point(-1,1));
s1.setP4(new Point(-1,0));
s1.hienThi();
Point p1 = new Point(0, 2);
2


Point p2 = new Point(0, 3);
Point p3 = new Point(1, 3);
Point p4 = new Point(1, 2);
//Goi ham khoi tao 4 tham so
Square s2 = new Square(p1, p2, p3, p4);
s2.hienThi();

//Goi ham khoi tao 4 tham so
Quadrangle q1 =
new Quadrangle(p1, p4, new Point(1,1), new Point(0,1));
Quadrangle q2 = new Square(p1, p2, p3, p4); //Up casting
JOptionPane.showMessageDialog(null,q1.getName());
q1.hienThi();
JOptionPane.showMessageDialog(null,q2.getName());
q2.hienThi();
Square s3 = (Square) q1; //Down casting
JOptionPane.showMessageDialog(null,s3.getName());
s3.hienThi();
Square s4 = new Square();
s4.nhap();
s4.hienThi();
}
}

Bài 3) Viết applet trong đó có vẽ hình và nhúng ảnh bên trong applet, trong đó có truyền tham số
từ HTML vào.
Hướng dẫn:
a) VD1:
Tạo HelloWWW2.java:
import java.applet.Applet;
import java.awt.*;
public class HelloWWW2 extends Applet {
public void init() {
setFont(new Font("SansSerif", Font.BOLD, 30));
Color background = Color.GRAY;
Color foreground = Color.DARK_GRAY;
String backgroundType = getParameter("BACKGROUND");

if (backgroundType != null) {
if (backgroundType.equalsIgnoreCase("LIGHT")){
background = Color.WHITE;
foreground = Color.BLACK;
} else if (backgroundType.equalsIgnoreCase("DARK")){
background = Color.BLACK;
foreground = Color.WHITE;
}
3


}
setBackground(background);
setForeground(foreground);
}
public void paint(Graphics g) {
g.drawString("Hello, World Wide Web.", 5, 35);
}
}
Tạo và chạy HelloWWW2.html:

Customizable HelloWWW Applet


<applet code="HelloWWW2.class" width=400 height=40>

<b>Error! You must use a Java-enabled browser.</b>
</applet>
<applet code="HelloWWW2.class" width=400 height=40>

<b>Error! You must use a Java-enabled browser.</b>
</applet>
<applet code="HelloWWW2.class" width=400 height=40>

<b>Error! You must use a Java-enabled browser.</b>
</applet>
b) VD2:
Tạo JavaJump.java
import java.applet.Applet;
import java.awt.*;
/** An applet that draws an image. */
public class JavaJump extends Applet{
private Image jumpingJava;
public void init() {
setBackground(Color.white);
setFont(new Font("SansSerif", Font.BOLD, 18));
jumpingJava = getImage(getDocumentBase(),
getParameter(“image”));
add(new Label("Great Jumping Java!"));
System.out.println("Yow! I'm jiving with Java.");
}
public void paint(Graphics g) {
g.drawImage(jumpingJava, 0, 50, this);
}
}
Tạo và chạy JavaJump.html, truyền tên image có trong máy vào file.
<HTML>
<HEAD>
<TITLE>Jumping Java</TITLE>
</HEAD>
<BODY BGCOLOR="BLACK" TEXT="WHITE">
<H1>Jumping Java</H1>
<P>
4



WIDTH=250
HEIGHT=335>

<B>Sorry, this example requires
Java.</B>
</APPLET>
</BODY>
</HTML>

Bài 4) Viết chương trình vẽ tại vị trí nhấn chuột như sau.
Đưa ra nhận xét về cách thức xử lý sự kiện.
Hướng dẫn:

a) Cách 1: Sử dụng kế thừa lớp
Tạo lớp CircleListener:
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
public class CircleListener extends MouseAdapter {
private int radius = 25;
public void mousePressed(MouseEvent event) {
Applet app = (Applet)event.getSource();
Graphics g = app.getGraphics();
g.fillOval(event.getX()-radius,
event.getY()-radius,
2*radius, 2*radius);
}

}

Tạo applet sử dụng lớp CircleListener để xử lý sự kiện
import java.applet.Applet;
import java.awt.*;
public class CircleDrawer1 extends Applet {
public void init() {
setForeground(Color.blue);
addMouseListener(new CircleListener());
}
}

Dịch
Tạo CircleDrawer1.html:
<HTML>
<HEAD>
<TITLE>Draw Circle 1</TITLE>
</HEAD>
<BODY BGCOLOR="BLACK" TEXT="WHITE">
<H1>Draw Circle by clicking the mouse</H1>
<P>
5


WIDTH=250
HEIGHT=335>
<B>Sorry, this example requires Java.</B>
</APPLET>
</BODY>

</HTML>

Mở file CircleDrawer1.html bằng IE hoặc Firefox.
Ví dụ kết quả: Nhấn chuột vào đâu thì tại vị trí đó vẽ hình tròn đặc màu xanh.

b) Cách 2: Sử dụng thực thi giao diện
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
public class CircleDrawer2 extends Applet
implements MouseListener {
private int radius = 25;
public void init() {
setForeground(Color.blue);
addMouseListener(this);
}
public void mouseEntered(MouseEvent event) {
System.out.println("mouseEntered");
}

6


public void mouseExited(MouseEvent event) {
System.out.println("mouseExited");
}
public void mouseReleased(MouseEvent event) {
System.out.println("mouseReleased");
}
public void mouseClicked(MouseEvent event) {

System.out.println("mouseClicked");
}
public void mousePressed(MouseEvent event) {
System.out.println("mousePressed");
Graphics g = getGraphics();
g.fillOval(event.getX()-radius,
event.getY()-radius,
2*radius, 2*radius);
}
}

7


Bài 5) Viết chương trình thực hiện biểu đồ lớp ở dưới. Trong đó:
- Phương thức draw(Graphics) khi được cài đặt trong lớp Circle sẽ vẽ đường tròn tại
tâm là tọa độ của Shape (x, y), bán kính bằng radius (chú ý: x, y tính theo pixel).
- Phương thức erase(Graphics) khi được cài đặt trong lớp Circle sẽ vẽ hình tròn đặc
(bằng màu nền hiện tại) tại tâm là tọa độ của Shape (x, y), bán kính bằng radius.
- Phương thức moveTo(Graphics, int, int) di chuyển hình từ tâm có tọa độ cũ sang tâm
có tọa độ mới là tham số truyền vào (xóa hình tại vị trí cũ, thay đổi tọa độ tâm, vẽ hình tại
tọa độ mới như dưới đây:
public void moveTo(Graphics g, int x1, int y1){
erase(g); x = x1; y = y1; draw(g);
}
- Phương thức calculateArea() tính theo công thức tính diện tích hình tròn.
- Tương tự lớp Circle, viết thêm lớp Square có 1 thuộc tính là side: float và viết các

phương thức giống như Circle, có điều phải phù hợp với hình vuông (vẽ hình vuông, tính
diện tích theo công thức tính diện tích hình vuông).


Chú ý: In nghiêng tức là abstract class/method.
Bài 6) Xây dựng một applet, trong đó có vẽ hình chữ nhật 3D bao quanh dòng chữ “Bai tap thuc
hanh so 3 - Applet”, âm thanh một bài hát nào đó và hình ảnh liên quan đến bài hát đó; trong
đó tên tệp âm thanh và hình ảnh; màu nền và màu vẽ được truyền trong tham số từ tệp HTML.

8