如何计算Java中两点之间的距离

时间:2014-10-26 17:45:26

标签: java distance

您好我是Java的新手。我真的不知道如何才能使这段代码完全正常工作。

public class Distance
{   private int xOne,yOne,xTwo,yTwo;
    private double distance;
    public Distance()
    {

    }

    public Distance(int x1, int y1, int x2, int y2)
    {       x1=xOne;
            x2=xTwo;
            y1=yOne;
            y2=yTwo;
    }

    public void setCoordinates(int x1, int y1, int x2, int y2)
    {
        xOne=4;
        yOne=3;
        xTwo=6;
        yTwo=56;    
    }

    public void calcDistance()
    {
        Math.sqrt((xTwo-xOne)*(xTwo-xOne)+(yTwo-yOne)*(yTwo-yOne));
    }

    public void print( )
    {
        out.println("x1:");
        out.println("y1:");
        out.println("x2:");
        out.println("y2:");
        out.println(distance);
    }
}

4 个答案:

答案 0 :(得分:3)

整个Distance类可以简化为单个方法。但我想这是一次学习练习,所以我会尽力帮助你逐步完成所有工作:

  • 如果这些点的int变量是double,那么它们的所有变量都会更有用。然后你可以使用分数位置和更大的距离范围。

  • 这些变量:private int xOne,yOne,xTwo,yTwo;更好地命名为x1, y1, x2, y2

  • 您的setCoordinates方法当前正在忽略参数并分配硬编码值,我猜想进行测试。无论如何,假设您修复了这个并且按照我的建议更改了字段名称,您需要区分本地变量和同名字段,您可以通过使用前缀{来限定对字段的访问权限来执行此操作{1}},所以你得到:

    this.
  • 由于作业是向后的,所以这个构造函数没有做任何事情:

    public void setCoordinates(double x1, double y1, double x2, double y2) {
        this.x1 = x1;
        this.y1 = y1;
        this.x2 = x2;
        this.y2 = y2;
    }
    

    应该是:

    public Distance(int x1, int y1, int x2, int y2)
    {       x1=xOne;
            x2=xTwo;
            y1=yOne;
            y2=yTwo;
    }
    

    等等。

    但是,你已经有一个 xOne=x1; 方法来做同样的事情,所以调用它而不是重复自己是有道理的:

    setCoordinates
  • public Distance(double x1, double y1, double x2, double y2) { setCoordinates(x1, y1, x2, y2); } 方法当前不起作用,因为在计算答案后,它并未将其分配给calcDistance变量,或对其执行任何其他操作。作业应该是:

    distance
  • 存在专用函数Math.hypot,用于计算public void calcDistance() { distance = Math.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)); } 。使用它简化了事情:

    √(x² + y²)
  • 接下来,考虑何时实际调用public void calcDistance() { distance = Math.hypot(x2 - x1, y2 - y1); } 方法......总是在设置坐标后,对吧?那么为什么不将数学包含在calcDistance中,并完全删除setCoordinates方法,以简化类的使用:

    calcDistance
  • 检查您的public void setCoordinates(double x1, double y1, double x2, double y2) { this.x1 = x1; this.y1 = y1; this.x2 = x2; this.y2 = y2; this.distance = Math.hypot(x2 - x1, y2 - y1); } 方法时,打印坐标的语句实际上并非如此:

    print

    应该是:

    out.println("x1:");
    
  • 使用out.println("x1:" + x1); 是合法的,假设您在文件的顶部有一个声明out.println(...);,但它是非标准的。请考虑将其更改为import static java.lang.System.out;

  • 最后,重新考虑整个System.out.println(...);课程。它应该计算点之间的距离,但大多数方法都致力于将坐标放入其中并从中获取结果。您已经提供了两种不同的方法来获取坐标:使用no-args构造函数后跟Distance,或者使用4-args构造函数。

    您提供了一种获取结果的方法setCoordinates方法,但它的用处有限。它不是通用,因为它只允许输出到控制台(在GUI应用程序中无用),并且只能以固定格式输出。您可以添加print方法(或制作getDistance字段distance)以增加其实用性,但让我们看看它会是什么样子。

    想象一下,该类的典型用法总是如下所示:

    public

    事实证明/* ... get x1,y1,x2,y2 ... */ Distance distance = new Distance(); distance.setCoordinates(x1, y1, x2, y2); double result = distance.getDistance(); /* ... do something with the result ... */ 只是一个美化的功能。因此,让我们把它变成一个直接返回结果的真实函数:

    Distance

    (它的static double calcDistance(double x1, double y1, double x2, double y2) { return Math.hypot(x2 - x1, y2 - y1); } 因为它不再需要创建一个类的实例。)这种方法现在非常小巧便携,可以放在任何一个类中,并且不会。需要专门的static课程。例如,您可以将它放在一个名为Distance的类中,以及其他有用的部分。无论如何,使用它现在更简单:

    MathUtils

    打印输出怎么样?那么,以该特定格式打印不是该函数的通用有用性的一部分。如果你只需要做一次,这可以在调用者中完成。如果您需要从代码中的多个位置以该格式计算和打印距离,那么它是方法的候选者,但不是相同的方法,因为保持/* ... get x1,y1,x2,y2 ... */ double distance = MathUtils.calcDistance(x1, y1, x2, y2); /* ... do something with the result ... */ 本身更好一般。这样的事情可以做到:

    calcDistance

无论如何,我希望这能解决你的问题。如您所愿,请随意使用此答案的任何/所有部分。

答案 1 :(得分:0)

您忘记使用结果

设置距离变量
distance = Math.sqrt((xTwo-xOne)*(xTwo-xOne)+(yTwo-yOne)*(yTwo-yOne));

答案 2 :(得分:0)

您应该使用Math.sqrt((xTwo-xOne)*(xTwo-xOne)+(yTwo-yOne)*(yTwo-yOne));更改distance = Math.sqrt( (x1-x2)^2 + (y1-y2)^2 );。 和,

out.println("x1:");
out.println("y1:");
out.println("x2:");
out.println("y2:");
out.println(distance);

System.out.println("x1 : " + x1);
System.out.println("y1 : " + y1);
System.out.println("x2 : " + x2);
System.out.println("y2 : " + y2);
System.out.println("distance : " + distance);

您可以参考this website来学习java基础知识。

答案 3 :(得分:0)

说实话,有几件事是错误的。

  1. 您没有在Distance构造函数中正确地将全局变量分配给本地变量。
  2. 由于您根本没有使用这些参数,因此您的setCoordinates方法无用。
  3. 您没有将Math.sqrt()分配给值
  4. 您需要System.out.println()而非println()