2012年(106)
分类: Java
2012-05-07 17:45:26
1. 编程序
本题需要创建和定义的源程序文件及类如下:
源程序文件:Point.java,类:Point。
根据要求修改实验5第2题中定义的Point类。
(1) 去掉set方法。
(2) 添加如下构造方法:
public Point(); //将点的坐标值置为(0, 0)
public Point(intx,int y);
public Point(Point p);
(3) 添加以下成员方法:
public void move(intx, int y); //当前点移至指定位置
public double distance(Point p); // 计算当前点与参数点之间的距离
(4) 修改main方法的相关代码以进行相应的测试。主要测试构造方法和新添加的成员方法。
public class Point {
private int x,y;
public final static intEAST = 1; // 类的有名常量,用以表示的点移动方向
public final static intSOUTH =2;
public final static intWEST = 3;
public final static intNORTH =4;
//public void set(int x,int y){this.x=x;this.y=y;}
// 设置点的坐标值
public Point(){
this(0,0);
}// 将点的坐标值置为(0, 0)
public Point(int x,int y){
x=this.x;
y=this.y;
}
public Point(Point p){
this( p.x,p.y );
}
public void move(int x, inty){
this.x=x;this.y=y;
}// 当前点移至指定位置
public doubledistance(Point p){
returnMath.sqrt((this.x-0)*(this.x-0)+(this.y-0)*(this.y-0));
}// 计算当前点与参数点之间的距离
public void move(intorientation){
if(orientation==EAST)
x++;
if(orientation==SOUTH)
y--;
if(orientation==WEST)
x--;
if(orientation==NORTH)
y++;
}
// 按指定的方向将当前点移动1个像素
public double distance(intx, int y){
returnMath.sqrt((this.x-x)*(this.x-x)+(this.y-y)*(this.y-y));
}
// 计算当前点与指定点之间的距离
public boolean equals(Pointp){
if(x==p.getX()&&y==p.getY())
return true;
else return false;
}
// 测试当前点与参数点p的坐标值是否相等
public int getX(){
return x;
}
// 返回当前点的X坐标
public int getY(){
return y;
}
// 返回当前点的Y坐标
public String toString(){
return"("+x+","+y+")";
}
// 以(x,y)格式返回当前点对象的字符串表示
public static void main(String args[]) {
Point o=new Point();
o.move(10,15);
System.out.println(o.toString());
o.move(EAST);
Point p=new Point();
p.move(5,6);
System.out.println("distance= " + o.distance(10,15));
System.out.println(o.equals(p));
System.out.println(o.toString());
}
}
2. 编程序
本题需要创建和定义的源程序文件及类如下:
源程序文件:zuoye6.java,类:Circle、TestCircle。
根据要求修改实验2第2题中定义的Circle类和TestCircle类。
(1) Circle类具有如下接口:
class Circle {
public Circle(); // 将当前圆的半径设置为1
public Circle(int r);
public Circle(Circle c); //用c的状态设置当前圆的状态
public double getArea(); // 计算圆的面积
public double getPerimeter(); // 计算圆的周长
public boolean equals(Circle c); // 测试当前圆与参数圆的面积是否相等
public int getRadius(); //返回圆的半径
public String toString(); // 以格式“圆(r)”返回当前圆的字符串表示
}
(2) 修改TestCircle以进行相应的测试。主要测试构造方法、equals方法和toString方法。
class Circle {
private int radius;
public Circle(){
this.radius=1;
}
public Circle(int r){
this.radius=r;
}
public Circle(Circle c){
this.radius=c.radius;
}
public double getArea(){
return Math.PI*radius*radius;
}
public double getPerimeter(){
return 2*radius*Math.PI;
}
public boolean equals(Circle c){
if(radius==c.radius) return true;
else return false;
}
public int getRadius(){
return radius;
}
public String toString(){
return "圆("+radius+")";
}
}
class TestCircle {
public static void main(String[] args) {
Circle c1 = new Circle();
Circle c2 = new Circle(3);
System.out.println("r1="+c1.getRadius());
System.out.println("a1="+c1.getArea()+",p1="+c1.getPerimeter());
System.out.println("r2="+c2.getRadius());
System.out.println("a2="+c2.getArea()+",p2="+c2.getPerimeter());
System.out.println("当前圆与参数圆的面积是否相等"+c1.equals(c2));
System.out.println("当前圆:"+c1.toString());
}
}
2. 编程序
本题需要创建和定义的源程序文件及类如下:
源程序文件:zuoye7.java,类:R_Circle、TestR_Circle。
利用实验6中的Point类和Circle类定义一个表示屏幕坐标系上的圆区域的R_Circle类。该类包含一个private的、Point型实例变量p,用于确定圆区域的圆心位置,和一个private的、Circle型实例变量c,用于确定圆区域的形状大小。类的软件接口如下:
class R_Circle {
public R_Circle(); // 构造方法,圆心位置(1, 1),圆半径为1
public R_Circle(Point p, Circle c); // 构造方法
public R_Circle(Circle c, Point p); // 构造方法
public R_Circle(int x, int y, int r ); // 构造方法,圆心位置(x, y),圆半径为r
public boolean equals(R_Circle rc); // 判断两个圆区域是否相等
public void move(int orientation); // 按指定的方向将当前圆区域移动1个像素
public Point getPoint(); // 返回当前圆区域的圆心位置
public int getRadius(); //返回当前圆区域的半径
public String toString(); // 以格式“圆区域(x, y, r)”返回当前圆区域的字符串表示
}
然后编写一个应用程序起始类TestR_Circle测试该类(两个类存放在同一个文件中)。
程序为:
class Point {
private int x;
private int y;
publicfinal static int EAST = 1;
publicfinal static int SOUTH =2;
publicfinal static int WEST = 3;
publicfinal static int NORTH =4;
publicPoint(){
this.x=0;
this.y=0;
}
public Point(int x,int y){
this.x=x;
this.y=y;
}
public Point(Point p){
this.x=p.x;
this.y=p.y;
}
public void move(int orientation){
switch(orientation){
case EAST:x++;break;
case SOUTH:y++;break;
case WEST:x--;break;
case NORTH:y--;break;
default:System.out.println("error");
}
}
public void move(int x, int y){
this.x=x;
this.y=y;
}
public double distance(Point p){
double z;
z=Math.sqrt(Math.pow((p.getX()-this.x),2)+Math.pow((p.getY()-this.y),2));
return z;
}
public double distance(int x, int y){
double d;
d=Math.sqrt(Math.pow((x-this.x),2)+Math.pow((y-this.y),2));
return d;
}
public boolean equals(Point p){
int a=p.getX();
int b=p.getY();
if(a==x&&b==y) return true;
else return false;
}
public int getX(){
return x;
}
publicint getY(){
return y;
}
publicString toString(){
return "("+x+","+y+")";
}
public static void main(String args[]){
Point o=new Point();
o.move(1,1);
Point p=new Point();
p.x=2;
p.y=2;
System.out.println("两点间的距离:"+o.distance(p));
System.out.println("当前点与参数点p的坐标值是否相等"+o.equals(p));
System.out.println("当前点:"+o.toString());
}
}
class Circle {
private int radius;
public Circle(){
this.radius=1;
}
public Circle(int r){
this.radius=r;
}
public Circle(Circle c){
this.radius=c.radius;
}
public double getArea(){
return Math.PI*radius*radius;
}
public double getPerimeter(){
return 2*radius*Math.PI;
}
public boolean equals(Circle c){
if(radius==c.radius) return true;
else return false;
}
public int getRadius(){
return radius;
}
public String toString(){
return "圆("+radius+")";
}
}
class TestCircle {
public static void main(String[] args) {
Circle c1 = new Circle();
Circle c2 = new Circle(3);
System.out.println("r1="+c1.getRadius());
System.out.println("a1="+c1.getArea()+",p1="+c1.getPerimeter());
System.out.println("r2="+c2.getRadius());
System.out.println("a2="+c2.getArea()+",p2="+c2.getPerimeter());
System.out.println("当前圆与参数圆的面积是否相等"+c1.equals(c2));
System.out.println("当前圆:"+c1.toString());
}
}
class R_Circle {
private Circle c;
private Point p;
publicR_Circle(){
p=new Point(1,1);
c=new Circle(1);
}
public R_Circle(Point p, Circle c){
this.p=new Point(p);
this.c=new Circle(c);
}
public R_Circle(Circle c, Point p){
this(p,c);
}
public R_Circle(int x, int y, int r){
this.p=new Point(x,y);
this.c=new Circle(r);
}
public boolean equals(R_Circle rc){
if(rc.c.equals(this.c)&rc.p.equals(this.p))return true;
else return false;
}
public void move(int orientation){
p.move(orientation);
}
public Point getPoint(){
return p;
}
public int getRadius(){
return c.getRadius();
}
public String toString(){
return "圆区域("+p.getX()+","+p.getY()+","+c.getRadius()+")";
}
}
class TestR_Circle{
public static void main(String[] args){
R_Circle a=new R_Circle();
R_Circle b=new R_Circle(3,3,2);
a.move(1);
System.out.println("判断两个圆区域是否相等:"+a.equals(b));
System.out.println("当前圆区域的圆心位置:"+a.getPoint());
System.out.println("当前圆区域的半径:"+a.getRadius());
System.out.println("以格式“圆区域(x, y, r)”返回当前圆区域的字符串"+a.toString());
}
}