2016-09-14 3 views
-1

Я как бы новичок в Java и пытаюсь написать код, который вычисляет расстояние двух точек 2 и 3 и масштаб 10. Как-то это не работает. Можете ли вы дать мне подсказку, чтобы я мог исправить код?Рассчитать расстояние между двумя точками в java

import java.lang.Math; 

public class Point { 
    int x, y; 

    public Point (int x, int y){ 
     this.x = x; 
     this.y = y; 
    } 
    public float scale(int factor) { 
     new Point(x * factor, y * factor); 
     return factor; 
    } 
    public float distance(){ 
     double distance = Math.sqrt(x * x + y * y); 
     return distance; 
    } 
    public void main(String[] args) { 
     float p = new Point(2,3).scale(10); 
     System.out.println(distance); 
    } 

    } 
+3

Возможно, вы хотите, чтобы 'scale' возвращал новый' Point', а не 'factor'? Если вы это сделали, вы можете написать 'float p = new Point (2,3) .scale (10) .distance();' и затем 'System.out.println (p);' –

+1

2 и 3 не являются точками , они являются целыми числами. Или, может быть, вы хотите рассчитать расстояние от точки в 2d-пространстве с координатами (2, 3) до другой точки, но я не вижу этого в вашем коде. Итак, чего вы пытаетесь достичь в математических терминах? – mtj

ответ

4

В масштабе вы создаете новую точку с масштабированными значениями и ничего не делаете с ней. Вы оставляете x и y рассматриваемой точки нетронутой.

Возможно, вы хотите умножить x и y на коэффициент, а не на создание новой точки.

Также вы печатаете переменную с именем distance, которая не существует (так что это, вероятно, даже не компилируется), вместо вызова метода с именем distance() и печати возвращаемого значения.

1
public class Point { 
    int x, y; 

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

    public static Point scalePoint(Point p, int factor) {   //scale a given point p by a given factor 
     Point scaledPoint = new Point(p.x * factor, p.y * factor); //by multipling the x and y value with the factor 
     return scaledPoint;           //and return the new scaled point 
    } 

    public static double calculateDistance(Point p1, Point p2){ //to calculate the distance between two points 
     double distance = Math.sqrt(p1.x * p2.x + p1.y * p2.y); //send the two points as parameter to this method 
     return distance;          //and return the distance between this two as a double value 
    } 

    public static void main(String[] args) { 
     Point p = new Point(2,3); 
     Point scaledPoint = scalePoint(p, 10); 
     double distance = calculateDistance(p, scaledPoint); 
     System.out.println(distance); 
    } 
} 
1

В настоящее время ваш метод distance вычисляет расстояние точки от начала координат (т.е. точка 0,0). Было бы больше смысла, если вы сделали, что явное:

class Point { 
    private static final Point ORIGIN = new Point(0, 0); 
    private final int x; 
    private final int y; 

    public float distanceTo(Point other) { 
     float xDelta = other.x - this.x; 
     float yDelta = other.y - this.y; 
     return Math.sqrt(xDelta * xDelta + yDelta * yDelta); 
    } 

    public Point scale(float factor) { 
     return new Point(x * factor, y * factor); 
    } 
} 

Затем найти расстояние до начала координат становится point.distanceTo(Point.ORIGIN), что делает цель более четким.