Bài 1 ây dựng lớp Pointbiểu diễn các điểm trong không gian 2 chiều với các tọa độ nguyên.
Lớp Pointcũng cung cấp các thao tác hay dùng trên các điểm.
a] Khai báo lớp Pointvới các biến nguyên int x, int ylưu trữ hoành độ và tung độ của
điểm.
b] Tạo các constructor sau cho lớp Point:
- Point[int x, int y]: tạo điểm có hoành độ x, tung độ y.
- Point[]: tạo điểm ở gốc tọa độ [0, 0].
- Point[Point p]: tạo điểm ở vị trí của điểm p.
c] Khai báo biến static originbiểu diễn gốc tọa độ [0, 0].
d] Override các phương thức sau của lớp Object:
- boolean equals[Object obj]: kiểm tra xem điểm có trùng với điểm được cho.
- String toString[]: trả về chuỗi biểu diễn cho điểm dạng [x, y].
e] Tạo các getter và setter cho x, y.
f] Tạo các phương thức sau cho lớp Pointđể thực hiện các thao tác tương ứng:
- boolean isOrigin[]: kiểm tra xem điểm có phải là gốc tọa độ [0, 0].
- void move[int x, int y]: di chuyển điểm đến tọa độ mới [x, y].
- void translate[int dx, int dy]: tịnh tiến điểm theo vector tịnh tiến [dx,
dy].Điểm [x, y] sau khi tịnh tiến theo vector tịnh tiến [dx, dy] sẽ thành điểm [x+ dx, y+
dy].
- static double distance[int x1, int y1, int x2, int y2]: tính
khoảng cách giữa điểm [x1, y1] và điểm [x2, y2].
- static double distance[Point p1, Point p2]: tính khoảng cách giữa
điểm p1và p2.
- double distance[int x, int y]: tính khoảng cách từ điểm đến điểm [x, y].
- double distance[Point p]: tính khoảng cách từ điểm đến điểm p.
- double distance[double a, double b, double c]: tính khoảng cách từ
điểm đến đường thẳng có phương trình tổng quát ax + by + c = 0.
bài làm của tớ :
ai giải thích lớp Object và cách Override các phương thức của nó
Lớp Pointcũng cung cấp các thao tác hay dùng trên các điểm.
a] Khai báo lớp Pointvới các biến nguyên int x, int ylưu trữ hoành độ và tung độ của
điểm.
b] Tạo các constructor sau cho lớp Point:
- Point[int x, int y]: tạo điểm có hoành độ x, tung độ y.
- Point[]: tạo điểm ở gốc tọa độ [0, 0].
- Point[Point p]: tạo điểm ở vị trí của điểm p.
c] Khai báo biến static originbiểu diễn gốc tọa độ [0, 0].
d] Override các phương thức sau của lớp Object:
- boolean equals[Object obj]: kiểm tra xem điểm có trùng với điểm được cho.
- String toString[]: trả về chuỗi biểu diễn cho điểm dạng [x, y].
e] Tạo các getter và setter cho x, y.
f] Tạo các phương thức sau cho lớp Pointđể thực hiện các thao tác tương ứng:
- boolean isOrigin[]: kiểm tra xem điểm có phải là gốc tọa độ [0, 0].
- void move[int x, int y]: di chuyển điểm đến tọa độ mới [x, y].
- void translate[int dx, int dy]: tịnh tiến điểm theo vector tịnh tiến [dx,
dy].Điểm [x, y] sau khi tịnh tiến theo vector tịnh tiến [dx, dy] sẽ thành điểm [x+ dx, y+
dy].
- static double distance[int x1, int y1, int x2, int y2]: tính
khoảng cách giữa điểm [x1, y1] và điểm [x2, y2].
- static double distance[Point p1, Point p2]: tính khoảng cách giữa
điểm p1và p2.
- double distance[int x, int y]: tính khoảng cách từ điểm đến điểm [x, y].
- double distance[Point p]: tính khoảng cách từ điểm đến điểm p.
- double distance[double a, double b, double c]: tính khoảng cách từ
điểm đến đường thẳng có phương trình tổng quát ax + by + c = 0.
bài làm của tớ :
PHP:
public class Point {
private int x;
private int y;
public static Point origin = new Point[];//Khai báo biến static originbiểu diễn gốc tọa độ [0, 0].
public Point[int x, int y] {//khoi tao Point co toa do xy
this.x = x;
this.y = y;
}
public Point[] {//khoi tao voi toa so 0;0
this.x = 0;
this.y = 0;
}
public Point[Point p] {//viet ra thui hem hieu co giong y cua de bai khong
this.x = p.x;
this.y = p.y;
}
//tao Set va get cho x va y
public int getX[] {
return x;
}
public int getY[] {
return y;
}
public void setX[int x] {
this.x = x;
}
public void setY[int y] {
this.y = y;
}
//Override các phương thức sau của lớp Object
@Override
public boolean equals[Object obj] {//ham khong lam viec
Point a = new Point[x, y];
if [obj.equals[a]] {
return true;
} else {
return false;
}
}
@Override
public String toString[] {
return "[+" + this.x + "," + this.y + "]";
}
//boolean isOrigin[]: kiểm tra xem điểm có phải là gốc tọa độ [0, 0].
public boolean isOrigin[] {
Point a = new Point[this.x, this.y];
if [a == origin] {
return true;
} else {
return false;
}
}
//void move[int x, int y]: di chuyển điểm đến tọa độ mới [x, y].
public void move[int x, int y] {
this.x = x;
this.y = y;
}
//void translate[int dx, int dy]: tịnh tiến điểm theo vector tịnh tiến [dx,
//dy].Điểm [x, y] sau khi tịnh tiến theo vector tịnh tiến [dx, dy] sẽ thành điểm [x+ dx, y+
//dy].
public void translate[int dx, int dy] {
this.x = this.x + dx;
this.y = this.y + dy;
}
//static double distance[int x1, int y1, int x2, int y2]: tính
//khoảng cách giữa điểm [x1, y1] và điểm [x2, y2].
public static double distance[int x1, int y1, int x2, int y2] {
double kc;
kc = Math.sqrt[Math.pow[[x1 - x2], 2] + Math.pow[[y1 - y2], 2]];
return kc;
}
//static double distance[Point p1, Point p2]: tính khoảng cách giữa
//điểm p1và p2.
public static double distance[Point p1, Point p2] {
double kc;
kc = Math.sqrt[Math.pow[[p1.x - p2.x], 2] + Math.pow[[p1.y - p2.y], 2]];
return kc;
}
//double distance[int x, int y]: tính khoảng cách từ điểm đến điểm [x, y].
public double distance[int x, int y] {
double kc;
kc = Math.sqrt[Math.pow[this.x - x, 2] + Math.pow[this.y - y, 2]];
return kc;
}
//double distance[Point p]: tính khoảng cách từ điểm đến điểm p.
public double distance[Point p] {
double kc;
kc = Math.sqrt[Math.pow[this.x - p.x, 2] + Math.pow[this.y - p.y, 2]];
return kc;
}
//double distance[double a, double b, double c]: tính khoảng cách từ
//điểm đến đường thẳng có phương trình tổng quát ax + by + c = 0
public double distance[double a, double b, double c] {
double kc;
double _x1;
_x1 = Math.sqrt[Math.pow[a, 2] + Math.pow[b, 2]];
double _x2;
_x2 = Math.abs[a * this.x + b * this.y + c];
kc = _x2 / _x1;
return kc;
}
}
hình như nó có một câu lênh: instanceof dùng để kiểm tra nó có phải đối tượng mình cần hay không.
Cụ thể:
Kết quả là true
nhưng nếu đối tượng là null thì kết quả là false
Đối với equals[Object] bạn có thể làm như sau:
Có thể ép kiểu luôn ngay trong câu lênh if để cho gọn
Bảo vệ 1:
- Mày có phải là con cháu gì của dòng họ Point không?
Tôi:
- Dạ không ạ. => xéo ngay.
----
Tôi: Dạ đúng.
Bảo vệ 1: Vào gặp Bảo vệ 2!
Bảo vẹ 2: mày cao bảo nhiêu... balah..
]
Viết tay, không dùng IDE nên có thể có sai sót
Cụ thể:
PHP:
Object p = new Point[120, 3];
// p = null;
if [p instanceof Point] {
System.out.println["true"];
} else {
System.out.println["false"];
}
nhưng nếu đối tượng là null thì kết quả là false
Đối với equals[Object] bạn có thể làm như sau:
PHP:
@Override
public boolean equals[Object obj] {
// Nếu đúng thì kiểm tra tiếp, sai thì trả về false
if [obj instanceof Point] {
// ép kiểu về Point, không xảy ra ngoại lệ vì đã kiểm tra và chắc chắn nó là kiểu Point.
Point p = [Point] obj;
// Nếu tọa độ bằng nhau.
if [this.x = p.x && this.y = p.y] {
return true;
}
}
return false;
}
Bảo vệ 1:
- Mày có phải là con cháu gì của dòng họ Point không?
Tôi:
- Dạ không ạ. => xéo ngay.
----
Tôi: Dạ đúng.
Bảo vệ 1: Vào gặp Bảo vệ 2!
Bảo vẹ 2: mày cao bảo nhiêu... balah..
Viết tay, không dùng IDE nên có thể có sai sót
g] Viết chương trình sử dụng lớp Pointtrên để giải bài toán sau:
Cho hình chữ nhật ABCDnhư hình vẽ
Tìm trên cạnh ABđiểm Mtọa độ nguyên sao cho chu vi tam giác MCDlà lớn nhất.
code của tớ
Cho hình chữ nhật ABCDnhư hình vẽ
Tìm trên cạnh ABđiểm Mtọa độ nguyên sao cho chu vi tam giác MCDlà lớn nhất.
code của tớ
PHP:
class test1 {
public static final double CD = 60;
public static void main[String[] args] {
int i;
Point[] M = new Point[100];
double CV[] = new double[100];//khoi tao mang double voi 500 phan tu
for [i = 0; i p1.getX[] ? p1.getX[] : p2.getX[];
i p1.getX[] ? p2.getX[] : p1.getX[]];
i++] {
temp = new Point[i, p2.getY[]];
// Tính chu vi
ptemp = Math.abs[p1.getX[] - p2.getX[]] + p1.distance[temp] + new Point[p2.getX[], p1.getY[]].distance[temp];
if [perimeter < ptemp] {
MPoints[0] = temp;
perimeter = ptemp;
}
}
// Luôn cho chạy từ số nhỏ đến số lớn
for [int i = p2.getX[] > p1.getX[] ? p1.getX[] : p2.getX[];
i p1.getX[] ? p2.getX[] : p1.getX[]];
i++] {
temp = new Point[i, p2.getY[]];
// Tính chu vi
ptemp = Math.abs[p1.getX[] - p2.getX[]] + p1.distance[temp] + new Point[p2.getX[], p1.getY[]].distance[temp];
// Xét nó có chu vi bằng không, nhưng loại bỏ trường hợp có tọa độ x bằng nhau
if [perimeter == ptemp && MPoints[0].getX[] != i] {
// Thêm vào mảng
MPoints = addElement[MPoints, temp];
}
}
return MPoints;
}
// Thêm phần tử vào mảng.
private Point[] addElement[Point[] array, Point e] {
Point[] result = new Point[array.length + 1];
for [int i = 0; i < array.length; i++] {
result[i] = array[i];
}
result[result.length - 1] = e;
return result;
}
}