2014-10-10 156 views
-5

有人能幫我解決下面的代碼嗎?我收到錯誤「The method originDistance is undefined for type point」;我能做些什麼來解決它?方法未定義類型

public class Test { 
    public static void main(String[] args) { 
     Point p1 = new Point(1, 1); 

     System.out.println(p1.originDistance()); 
    } 

    int x; 
    int y; 

    public double originDistance() { 
     double dist = Math.sqrt(x * x + y * y); 
     return dist; 
    } 
} 

謝謝!

回答

0
Point p1 = new Point(1, 1); 

更改爲

Test p1 = new Test(1, 1); 

,並添加

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

測試是你的類不點,以便這需要也發生了變化,你需要添加一個構造函數初始化x和y變量。

+0

謝謝!我不知道我需要將我的方法與我的課程相匹配。 – Memory 2014-10-10 17:49:30

+0

非常歡迎我很高興能爲您提供幫助。 – brso05 2014-10-10 17:51:08

1

我想這是你想要什麼:

public Test() 
{ 
    Point p1 = new Point(1, 1); 

    System.out.println(this.originDistance(p1.x, p1.y)); 
} 

public static void main(String[] args) { 
    new Test(); 
} 

public double originDistance(int x, int y) { 
    double dist = Math.sqrt(x * x + y * y); 
    return dist; 
} 

您試圖訪問從Point對象的方法,但它是在你的Test類實際上定義。

此外,您的方法不會像xy值那樣從未實例化過。

您當前班級的標識符是this這就是爲什麼我在調用originDistance之前使用了關鍵字。有些人認爲它更清楚,但它也可以只是調用沒有前綴的方法,不會違反任何約定。

+0

這不起作用,除非originDistance是一個靜態方法。他還需要一個點課程。 – brso05 2014-10-10 16:59:17

+0

你說得對,我寫得很快,編輯我的文章。 – 2014-10-10 17:02:13

1

您的方法在Test類中定義,而不是在點類中定義。 你需要可以重命名類或創建一個測試實例打電話給你originDistance()方法

Test p1 = new Test(1,1); 
System.out.println(p1.originDistance()); 

查找到Java小徑真正好的文檔和學習java有用的技巧。

+0

這不會沒有構造函數。 – brso05 2014-10-10 16:58:15

+0

啊對..我沒有嘗試完全編譯代碼,只是看了他所問的具體問題,但你說得對,這裏有幾個問題。 Point類的import語句在哪裏? – Dave 2014-10-10 17:17:04

2

originDistance方法不屬於Point類,它屬於您的Test類。如果你想用它在你的時候,你可以通過這些更改:

  • 將其更改爲一個靜態方法
  • 收到一個點作爲一個參數

它會是這個樣子:

public static double originDistance(Point point) { 
    double dist = Math.sqrt(point.getX() * point.getX() + point.getY() * point.getY()); 
    return dist; 
} 

然後在你改變你的主要調用了新方法: 的System.out.println(originDistance(P1));

相關問題