0

如何在不带参数的方法下将Point.java的distanceTo(Point p)调用到Point2.java?应该有办法,但我无法从我的材料中找到。有人可以帮助我吗?已经做了2天了。请帮忙...

---------------------Point.java-------------------------- --------

public class Point{
    private int x;
    private int y;

    //x and y coordinates as parameters
    public Point(int x, int y){
        this.x = x;
        this.y = y;
    }

    //I want to call this method by calling a method which taken no parameter in Point2.java.
    public double distanceTo(Point p){
          return Math.sqrt(((x - p.x) * (x - p.x)) + ((y - p.y) * (y - p.y)));
    }
}

---------------------ClonePoint.java-------------- --------

public class ClonePoint{
    private int a;
    private int b;

    //x and y coordinates as parameters
    public ClonePoint(int a, int b){
        this.a = a;
        this.b = b;
    }

    //I failed with this way.  Can anybody correct me?
    public double measureDistance(){//it should be takes no parameter.
        return distanceTo(ClonePoint p)
    }

}

----------------------PointDriver.java-------------------------- ----

public class PointDriver {
    public static void main(String [] args) {

        Point2 nn = new Point2(11, 22);
        Point2 mm = new Point2(33, 44);


        System.out.println(nn.distanceTo(mm)); //I succeeded with this!
        System.out.println(nn.measureDistance(mm)); //But I got an error illegal start of expression
    }
}
4

2 回答 2

1

@Evan 类是您物品的通用容器。一辆车,一个人,一个点(在你的情况下)。

每次你想“创建”你定义的类的一个或多个对象时,你实例化它们:

Person evan = new Person();
Person rob = new Person();

我们俩都是人,你真的不需要定义类Person1Person2

在一个类中,您应该定义用于“关联”其他类似对象的方法。例如:

// In Person.java
public void greet(Person p) {
    System.out.println("My name is "+this.name+". Nice to meet you +"p.getName());
}
// In main
rob.greet(evan); // it now gives compile errors of course but take the point :P

你想要实现的是Point用你想要使用的所有方法创建一个更好、更完整的类。最后,只需在 main 中初始化更多Point对象(同一个类!)并使用它们。

希望能帮助到你 :)

编辑

好的,也许我已经完成了你的作业要你完成的任务。

“无参数”方法measureDistance()应该让您想知道一件重要的事情:“距哪一点的距离????”。

显然,如果函数不带参数,则该演算所需的所有信息都必须在调用它的对象中。你不觉得吗?

所以,你可能想要实现一个二级类(如果你真的需要定义它就可以Point2了,但是改变这个名字,因为它很混乱),它可以Point在它的构造函数中接受 a (自己保存这个信息),然后使用那个 Point 来测量与它的距离。

例子

public class Point2{
    private int a;
    private int b;
    private Point startingPoint;

    public Point2(int a, int b, Point p){
        this.a = a;
        this.b = b;
        startingPoint = p;
    }

    // Computes the distance from starting point to this
    public double measureDistance(){//it takes no parameter.
        return startingPoint.distanceTo(a, b);
    }

    /*
    if you can't edit distanceTo() it gets a little verbose but you must create a
 Point with Point2 coordinates - remember this example when you will study Inheritance

    public double measureDistance() {
        Point endingPoint = new Point(a, b);
        return startingPoint.distanceTo(endingPoint);
    }
    */

}
于 2013-07-13T09:15:33.167 回答
0

首先,复制一个做同样事情的类并不是一个好主意,因为你正在做额外的不必要的工作。其次,如果您制作各种点类型,您将失去它们之间无缝兼容的优势。

然后,如果你想从其他类调用方法,你可以这样做:

NameOfOtherClass.SomeMethod()

但是您必须将另一个类中的 SomeMethod 声明为静态...

public static double SomeMethod() { ... };

但是您不能使用该方法访问您在代码中创建的具体点的数据,因此任何数据都应该放入参数中。

如果您想按照自己的方式进行操作,您只需向public double measureDistance() 函数添加一个参数,以便该函数可以访问另一个点来测量距离。

于 2013-07-13T09:01:39.970 回答