java Circle类的问题
//实现一个Circle类,该类包含表示圆心的Point型变量center,
//表示半径的int radius变量,以及构造方法Circle()、Circle(int xx,int yy,int r)、Circle(Point c,int r),
//返回周长和面积的int perimeter()、double area()方法,
//返回两个圆是否为同一个圆(返回0)、同心圆(返回1)、相交的圆(返回2)、分离的圆(返回3)、
//包含的圆(返回4)等关系的int relation(Circle c)等方法。PI值可以用Math.PI常量。
class Point{ //点类的定义
int x,y;
Point(){
x=0;y=0; //Point类中的构造函数
}
Point(int xx,int yy){
this.x=xx; //this不加也可运行
this.y=yy;
}
int getX(){ //后面用到了
return x;
}
int getY(){
return y;
}
double distance(Point p){ //对象小写,类大写
return Math.sqrt((x-p.x)*(x-p.x)+(y-p.y)*(y-p.y)); //用来求两点之间距离
}
}
class Circle{ //圆类的定义
int radius=0;
//int x,y; //Point类型 圆心跟着Point走 不用再次定义x,y
Point center; //定义点类的圆心
Circle(){
radius=1; //圆类的构造函数
center=new Point(); //申请空间
}
Circle(int xx,int yy,int r){
radius=r;
center=new Point(xx,yy); //因为没有定义Circle中的x,y;所以直接引用Point的构造函数即可
}
Circle(Point c,int r){
radius=r;
center=c;
}
double perimeter()
{
return 2*3.14*radius; //以刚开始声明的radius为准
}
double area()
{
return 3.14*radius*radius;
}
int relation(Circle c)
{
int cx = c.center.getX(); //得到圆的圆心的横坐标
int cy = c.center.getY();
int cr = c.radius;
int tx = this.center.getX();
int ty = this.center.getY();
Point myPoint=new Point(); //只创建对象,无需赋值,给了数也没有用
Point point1=new Point();
double distance1 = myPoint.distance(point1); //定义圆心距,圆心与圆心之间的距离,的通过对象调用distance;
//对象是类的实体,只有通过对象才能调用类
if(cx == tx && cy == ty && cr == radius) {
return 0; //同一个圆
} else if(cx ==tx && cy==ty) {
return 1; //同心圆
} else if(distance1 ==(cr+radius)) {
return 2; //相交的圆
} else if(distance1 > (cr+radius)) {
return 3; //分离的圆
} else if(distance1 < (cr+radius)) {
return 4; //包含的圆
}
else
return 5;
}
}
class Sun{
public static void main(String[] args){
double a,b,flag;
Circle circle1=new Circle(12,12,4); //用来预备着求圆的位置关系的
Circle circle2=new Circle(3,12,5);
a=circle1.perimeter(); //上面改成无参的了
b=circle1.area();
flag=circle1.relation(circle2);
if(flag==0)
System.out.println("两个圆的关系是:两个圆为同一个圆");
if(flag==1)
System.out.println("两个圆的关系是:两个圆为同心圆");
if(flag==2)
System.out.println("两个圆的关系是:两个圆为相交的圆");
if(flag==3)
System.out.println("两个圆的关系是:两个圆为分离的圆");
if(flag==4)
System.out.println("两个圆的关系是:两个圆为包含的圆");
if(flag==5)
System.out.println("两个圆的关系是:两个圆不是特有的关系");
System.out.println("圆的周长是:"+a);
System.out.println("圆的面积是:"+b);
}
}
好像distance函数始终无法调用,就是只是输出包含关系,不输出相交和分离,求高手指点!
[解决办法]
你其他地方的代码也有问题,下面是我改了的,有5种基本关系,对于同心圆和相等的这种情况我没有处理,你可以考虑添加
class Point{ //点类的定义 private int x; private int y; public Point(){ x=0; y=0; } public Point(int xx,int yy){ this.x=xx; //this不加也可运行 this.y=yy; } public int getX(){ //后面用到了 return x; } public int getY(){ return y; } public double distance(Point p){ //对象小写,类大写 return Math.sqrt((x-p.x)*(x-p.x)+(y-p.y)*(y-p.y)); //用来求两点之间距离 }}class Circle{ //圆类的定义 private int radius=0; //int x,y; //Point类型 圆心跟着Point走 不用再次定义x,y private Point center; //定义点类的圆心 public Circle(){ radius=1; //圆类的构造函数 center=new Point(); //申请空间 } public Circle(int xx,int yy,int r){ radius=r; center=new Point(xx,yy); //因为没有定义Circle中的x,y;所以直接引用Point的构造函数即可 } public Circle(Point c,int r){ radius=r; center=c; } public double perimeter(){ return 2*3.14*radius; //以刚开始声明的radius为准 } public double area(){ return 3.14*radius*radius; } public int relation(Circle c){ int cx = c.center.getX(); //得到圆的圆心的横坐标 int cy = c.center.getY(); int cr = c.radius; int tx = this.center.getX(); int ty = this.center.getY(); Point myPoint=new Point(tx,ty); Point point1=new Point(cx,cy); double distance1 = myPoint.distance(point1); //定义圆心距,圆心与圆心之间的距离,的通过对象调用distance; //distance1圆心距 //第一个圆半径radius //第二个圆半径cr if(distance1 > (cr+radius)){ return 0;//相离 }else if(distance1 ==(cr+radius)){ return 1;//外切 }else if(distance1 < (cr+radius)&&distance1>Math.abs(cr-radius)){ return 2;//相交 }else if(distance1==Math.abs(cr-radius)){ return 3;//内切 }else if(distance1<Math.abs(cr-radius)){ return 4;//包含 }else{ return -1; }// if(cx == tx && cy == ty && cr == radius) {// return 0; //同一个圆// } else if(cx ==tx && cy==ty) {// return 1; //同心圆// } else if(distance1 ==(cr+radius)) {// return 2; //外切的圆// } else if(distance1 > (cr+radius)) {// return 3; //外分离的圆// } else if(distance1 < (cr+radius)&&distance1>Math.abs(cr-radius)) {// return 4; //相交的圆// } else if(distance1 ==Math.abs(cr+radius)){// return 5; //内切圆// }// else// return 5; }}public class Sun{ public static void main(String[] args){ double a,b,flag; Circle circle1=new Circle(12,12,4); //用来预备着求圆的位置关系的 Circle circle2=new Circle(3,12,5); a=circle1.perimeter(); //上面改成无参的了 b=circle1.area(); flag=circle1.relation(circle2); if(flag==0) System.out.println("两个圆的关系是:两个圆为相离"); if(flag==1) System.out.println("两个圆的关系是:两个圆为外切"); if(flag==2) System.out.println("两个圆的关系是:两个圆为相交"); if(flag==3) System.out.println("两个圆的关系是:两个圆为内切"); if(flag==4) System.out.println("两个圆的关系是:两个圆为包含"); if(flag==-1) System.out.println("两个圆的关系是:未知"); System.out.println("圆的周长是:"+a); System.out.println("圆的面积是:"+b); }}