2014-10-10 153 views
-5

有人能帮我解决下面的代码吗?我收到错误“The method originDistance is undefined for type point”;我能做些什么来解决它?方法未定义类型

public class Test { 
    public static void main(String[] args) { 
     Point p1 = new Point(1, 1); 

     System.out.println(p1.originDistance()); 
    } 

    int x; 
    int y; 

    public double originDistance() { 
     double dist = Math.sqrt(x * x + y * y); 
     return dist; 
    } 
} 

谢谢!

回答

0
Point p1 = new Point(1, 1); 

更改为

Test p1 = new Test(1, 1); 

,并添加

public Test(int x, int y) 
{ 
    this.x = x; 
    this.y = y; 
} 

测试是你的类不点,以便这需要也发生了变化,你需要添加一个构造函数初始化x和y变量。

+0

谢谢!我不知道我需要将我的方法与我的课程相匹配。 – Memory 2014-10-10 17:49:30

+0

非常欢迎我很高兴能为您提供帮助。 – brso05 2014-10-10 17:51:08

1

我想这是你想要什么:

public Test() 
{ 
    Point p1 = new Point(1, 1); 

    System.out.println(this.originDistance(p1.x, p1.y)); 
} 

public static void main(String[] args) { 
    new Test(); 
} 

public double originDistance(int x, int y) { 
    double dist = Math.sqrt(x * x + y * y); 
    return dist; 
} 

您试图访问从Point对象的方法,但它是在你的Test类实际上定义。

此外,您的方法不会像xy值那样从未实例化过。

您当前班级的标识符是this这就是为什么我在调用originDistance之前使用了关键字。有些人认为它更清楚,但它也可以只是调用没有前缀的方法,不会违反任何约定。

+0

这不起作用,除非originDistance是一个静态方法。他还需要一个点课程。 – brso05 2014-10-10 16:59:17

+0

你说得对,我写得很快,编辑我的文章。 – 2014-10-10 17:02:13

1

您的方法在Test类中定义,而不是在点类中定义。 你需要可以重命名类或创建一个测试实例打电话给你originDistance()方法

Test p1 = new Test(1,1); 
System.out.println(p1.originDistance()); 

查找到Java小径真正好的文档和学习java有用的技巧。

+0

这不会没有构造函数。 – brso05 2014-10-10 16:58:15

+0

啊对..我没有尝试完全编译代码,只是看了他所问的具体问题,但你说得对,这里有几个问题。 Point类的import语句在哪里? – Dave 2014-10-10 17:17:04

2

originDistance方法不属于Point类,它属于您的Test类。如果你想用它在你的时候,你可以通过这些更改:

  • 将其更改为一个静态方法
  • 收到一个点作为一个参数

它会是这个样子:

public static double originDistance(Point point) { 
    double dist = Math.sqrt(point.getX() * point.getX() + point.getY() * point.getY()); 
    return dist; 
} 

然后在你改变你的主要调用了新方法: 的System.out.println(originDistance(P1));

相关问题