(仅记录个人的学习之路)
题目如下:
(1) 设计一个名为Point的类,代表一个以x坐标和y坐标表示的点。该类包括:
a) 一个创建点(0,0)的无参构造方法;
b) 以指定坐标构建点的构造方法;
c) 成员变量x和y的get和set方法;
d) 一个名为distance的静态方法,返回两个MyPoint对象之间的距离。
提示:
- 方法头:public static double distance(Point p1, Point p2)
- 调用Math类的sqrt方法计算平方根,方法定义如下: public static double sqrt(double a)
//返回正确舍入的 double 值的正平方根。
e) 一个名为distance的方法,返回从该点到MyPoint类型的指定点之间的距离;
提示:
- 方法头: public double distance(Point p)
- 调用上面的静态distance方法计算该点和指定点之间的距离。
f) 覆盖父类的toString()方法,返回当前点对象的描述;
g) 覆盖父类的equals(Object obj)方法,如果两个点的x,y坐标相同,返回true,否则返回false。
提示:方法头不要写成 public boolean equals(Point obj)
(2) 编写一个Circle类,包括:
a) 一个Point类型的私有成员变量o,表示圆心;
b) 一个double类型的私有成员变量radius,表示半径;
c) 一个无参的构造方法,创建一个圆心在原点,且半径为1的默认的圆;
d) 一个带参数的构造方法,创建指定圆心o和半径radius的圆;
e) 一个带参数的构造方法,创建指定圆心坐标x和y以及半径radius的圆;
f) 两个成员变量的修改器和读取器;
g) 一个返回圆面积的方法getArea();
h) 一个返回圆周长的方法getPerimeter();
i) 如果给定点p在这个圆内,那么方法contains(Point p)返回true,否则返回false;
j) 如果给定的圆在这个圆内,那么方法contains(Circle circle) 返回true,否则返回false;
k) 如果给定的圆和这个圆重叠,那么方法overlaps(Circle circle) 返回true,否则返回false。
l) 覆盖父类的toString()方法,返回当前圆对象的描述;
m) 覆盖父类的equals(Object obj)方法,如果两个圆的圆心和半径相同,返回true,否则返回false。
(注:equals(Object obj)方法重写了Object类的equals方法,因此参数obj是Object类型,题中需要①判断该obj对象是否是Circle类型,利用obj instanceof Circle语句;②若是,则本对象与obj对象比较圆心及半径,如果均相等,则返回true,否则返回false;③比较圆心时,调用Point的equals(Object obj)方法)
(3) 要求:
a) 画出UML类图(注意,包含两个类,且要体现两个类之间关系,Object类可以省略)。
b) 编程实现两个类。
c) 编写一个测试程序,
① 创建点p1(1,2),p2(3,4),p3(1,2),判断p1和p2是否相等,判断p1和p3是否相等,并分别输出结果;
② 创建圆c1(1,2,6)、c2(1,2,5)、c3(1,2,6)、c4(0,0,1)、c5(7,3,7)、c6(90,100,6)【注;前2个数字是圆心坐标,第3个为半径】,实现下列判断并显示判断结果:
l c1和c2是否相等;c1和c3是否相等;
l 输出c1和c2的对象描述;
l 分别判断点(7,8),(3,4)是否在圆c1内;
l 判断c4是否包含在c1,c4是否包含在c6,c4是否与c6重叠,c4是否与c5重叠。
代码如下:
package TestObject;
class Point{
private double x;
private double y;
public Point() {
x = 0;
y = 0;
}
public Point(double x, double y) {
this.x = x;
this.y = y;
}
public double getX() {
return x;
}
public void setX(double x) {
this.x = x;
}
public double getY() {
return y;
}
public void setY(double y) {
this.y = y;
}
public static double distance(Point p1, Point p2) {
return Math.sqrt((p1.getX() - p2.getX()) * (p1.getX() - p2.