黑马程序员技术交流社区

标题: <已解决>帮我找在代码中找个错误 [打印本页]

作者: 樊占江    时间: 2012-8-6 20:45
标题: <已解决>帮我找在代码中找个错误
本帖最后由 樊占江 于 2012-8-6 21:27 编辑

class Point{
double x;
double y;

Point(double x1, double y1){
x = x1;
y = y1;
}

double getDistance(Point o){
return (x-o.x)*(x-o.x)+(y-o.y)*(y-o.y);
}
} class Circle{
static private Point o;
static private double radius;
Circle (Point p, double r){
o = p;
radius = r;
}
public static void main(String[] args){
Point p = new Point(3,4);
p.getDistance(p);
Circle c = new Circle(p, 10);
double q = radius*radius;
if(p.getDistance(p)>q){
System.out.println("该点在圆内");
}
else{
System.out.println("该点不在圆内");
}
}
}
结果总是不在圆内,我不知道那里出问题呢?各位帮我看看吧 思路什么的,还有哪里不对。
谢谢
作者: 黑马__李龙    时间: 2012-8-6 21:03
本来想帮你改代码呢,但是发现,你不是不会写代码,而是思路有点乱,
还是帮你说明你的问题吧。
首先,先说小的:double getDistance(Point o){
return (x-o.x)*(x-o.x)+(y-o.y)*(y-o.y);
}
你是要求两点距离么?为什么没有平方根?
其次,主要原因
p.getDistance(p)  求P点到P点的距离?
它肯定是0,所以肯定比一个double q = radius*radius;  10*10=100小,所以肯定“该点不在圆内”。
思路吧,我觉得你应该是求圆心和点的距离,和半径比是吧,相信你能行的
作者: 周坤    时间: 2012-8-6 21:17
其实没什么问题,只要知道两点距离大于半径,则在圆外。
if(p.getDistance(p)>q){//这里反过来p.getDistance(p)<q,该点才会在圆内。
System.out.println("该点在圆内");
}
else{
System.out.println("该点不在圆内");

至于程序结果,圆心自然永远都要在圆内的。
作者: 王舜民    时间: 2012-8-6 21:24
看你代码好累,

class Point
{
        double x;
        double y;

        Point(double x1, double y1)
        {
                x = x1;
                y = y1;
        }

        double getDistance(Point o)
        {
                //return (x-o.x)*(x-o.x)+(y-o.y)*(y-o.y);
                return 500;
        }
}
class Circle
{
        static private Point o;
        static private double radius;
        Circle (Point p, double r){
        o = p;
        radius = r;
}
public static void main(String[] args)
        {
                Point p = new Point(1,2);
                p.getDistance(p);
                Circle c = new Circle(p, 10);
                double q = radius*radius;
                if(p.getDistance(p)>q)
                {
                        System.out.println("该点在圆内");
                }
        else
        System.out.println("该点不在圆内");
       
        }
}
我觉得李龙说的有道理啊,
你不如试试eturn (x-o.x)*(x-o.x)+(y-o.y)*(y-o.y);先注释了,直接注释成500试一下就知道了
作者: 樊占江    时间: 2012-8-6 21:25
李龙276596456 发表于 2012-8-6 21:03
本来想帮你改代码呢,但是发现,你不是不会写代码,而是思路有点乱,
还是帮你说明你的问题吧。
首先,先说 ...

嗯!谢谢
作者: 樊占江    时间: 2012-8-6 21:26
王舜民 发表于 2012-8-6 21:24
看你代码好累,

class Point

嗯!今天精神不大好,所以思路有点乱
作者: 黑马连家华    时间: 2012-8-6 21:36
虽然我不会java 但解决问题的思路可以是不会java的人都可以想得出来的
比较两点到原点的距离我想是不是可以这样算
原点为 o1,o2
一点为x1,y1
另一点为 x2,y2
然后比较大小:|x1-o1|+|y1-o2|         |x2-o1|+|y2-o1|
试试看 我只是想像出来的 没有实践也没论证        
作者: 郑彬    时间: 2012-8-6 21:38
double q = radius*radius;
radius没定义。
p.getDistance(p)肯定等于0。如果radius定义了,那么0小于半径的平方是对的,所以就不在圆内了。
作者: 樊占江    时间: 2012-8-6 22:55
郑彬 发表于 2012-8-6 21:38
double q = radius*radius;
radius没定义。
p.getDistance(p)肯定等于0。如果radius定义了,那么0小于半径 ...

                  聪明




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2