2014-10-26 234 views
-2

嗨我真的是Java新手。我真的不知道我能做些什麼來完成這個代碼。如何計算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); 
    } 
} 
+0

試着讓你的代碼更專業一些。我們很樂意提供幫助,只需以更恰當的方式說出您的問題。 – 2014-10-26 17:48:21

回答

3

整個Distance類可以減少到一個單一的方法。但我想這是一個學習的過程,所以我會盡力幫助你一步一步的一切我可以:

  • int變量的所有的點是,如果他們double更爲有用。然後,您可以使用小數位和更大範圍的距離。

  • 這些變量:private int xOne,yOne,xTwo,yTwo;將更好地命名爲x1, y1, x2, y2

  • 您的setCoordinates方法目前正在忽略參數並分配硬編碼的值,用於測試,我想。無論如何,假設你解決了這個問題,並且按照我的建議更改了字段名稱,則需要區分本地變量和相同名稱的字段,通過使用前綴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變量,或者對其做任何其他操作。分配應該是:

    public void calcDistance() { 
        distance = Math.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)); 
    } 
    
  • 專門的功能,Math.hypot存在,它計算√(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(...);

  • 最後,重新考慮整個Distance類。它應該計算點之間的距離,但大多數方法都致力於獲取座標並從中得出結果。您提供獲得座標轉換成它的兩種不同的方式:要麼使用無參數的構造其次是setCoordinates,或使用4參數的構造。

    你提供獲得結果出來,該print方法的一種方式,但它的作用是有限的。這不是很一般,因爲它允許只輸出到控制檯(在GUI應用程序沒用),只在一個固定的格式。您可以添加一個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,因爲它不再需要一個類的實例被創建)

    static double calcDistance(double x1, double y1, double x2, double y2) { 
        return Math.hypot(x2 - x1, y2 - y1); 
    } 
    

    這種方法是現在這麼小巧便攜它可能是放在任何班級,並且不需要專門的Distance班。例如,您可以將它放在名爲MathUtils的類中,以及其他有用的零件。無論如何,使用它現在更簡單:

    /* ... get x1,y1,x2,y2 ... */ 
    double distance = MathUtils.calcDistance(x1, y1, x2, y2); 
    /* ... do something with the result ... */ 
    

    如何打印輸出?那麼,以這種特定的格式打印,並不是該功能的一般功能的組成部分。如果你只需要做一次,那麼可以在調用者中完成。如果你需要從代碼中的幾個地方以這種格式計算和打印距離,那麼這是一種方法的候選方法,但方法不同,因爲最好保持calcDistance本身的一般性。像這樣的東西會做:

    static void printDistance(double x1, double y1, double x2, double y2) { 
        System.out.println("x1:" + x1); 
        System.out.println("y1:" + y1); 
        System.out.println("x2:" + x2); 
        System.out.println("y2:" + y2); 
        System.out.println("distance:" + calcDistance(x1, y1, x2, y2)); 
    } 
    

無論如何,我希望這能解決你的問題。如果您認爲合適,請隨時使用此答案的任何/所有部分。

0

你忘了設定的距離變量,結果

distance = Math.sqrt((xTwo-xOne)*(xTwo-xOne)+(yTwo-yOne)*(yTwo-yOne)); 
0

你應該distance = Math.sqrt((x1-x2)^2 + (y1-y2)^2);改變Math.sqrt((xTwo-xOne)*(xTwo-xOne)+(yTwo-yOne)*(yTwo-yOne));。 而且,

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基礎知識。

0

說實話,有兩件事是錯誤的。

  1. 您不是在Distance構造函數中正確地將全局變量分配給本地變量。
  2. 你的setCoordinates方法是沒用的,因爲你根本沒有使用參數。
  3. 您沒有分配Math.sqrt()的值
  4. 你需要把System.out.println()而不僅僅是println()
相關問題