-1

嗨,我是 java 新手,我不确定如何在 java 中使用类函数。我的老师给了我们point2d课程,并希望我们在那里使用该功能。有一个函数调用 distanceTo

// return Euclidean distance between this point and that point
public double distanceTo(final Point2D that) {
    final double dx = this.x - that.x;
    final double dy = this.y - that.y;
    return Math.sqrt(dx*dx + dy*dy);
}

我不确定我应该如何实现这一点。这是我的代码

public static int calc(int amount)
{
      for (int t = 0; t < amount; t++)
       {
          double current = 0;
          double x = StdRandom.random();
          double y = StdRandom.random();
          Point2D p = new Point2D(x, y);
          if ( current < distanceTo(Point2D p ) )
          {
          }

我尝试使用distanceTo(p)distanceTo(Poin2D)但没有任何效果。

提前致谢

4

3 回答 3

1

由于它是一个类函数,因此您还需要引用该类的实例。在这种情况下,类似

Point2D b;
p.distanceTo(b);  // Invoke distanceTo on b from the point of view of p

这是因为您的方法需要引用 2 个对象。调用对象p和传递的对象b,在您的函数中分别称为thisthat

于 2013-04-18T04:55:12.183 回答
0

public static int calc(int amount)staticdistanceTo不是。

对于 not being staticdistanceTo需要一个对象的封闭实例,例如:new Point2D().distanceTo(...)

然后你可以打电话distanceTo给你一些Point2D你已经拥有的,说p2

p2.distanceTo(p);

或者您可以尝试distanceTo变成一个static方法,该方法将接收两个点作为参数:

public static double distanceTo(final Point2D one, final Point2D that) {
    final double dx = one.x - that.x;
    final double dy = one.y - that.y;
    return Math.sqrt(dx*dx + dy*dy);
}

并使用以下方法调用它:

distanceTo(p, p2);

PS .:作为替代方案,也许您的解决方案是变成calc非静态的。你应该试试,也许。

于 2013-04-18T04:52:40.243 回答
0

要调用类的非静态方法,请使用.运算符。

要调用distanceTo,请使用以下语法:

p.distanceTo(p);

如果它是静态的,则使用带.运算符的类名

Point2D.distanceTo(p);
于 2013-04-18T04:55:30.017 回答