2011-03-09 48 views
0
public MyLine(double x, double y) 
{ 

    MyLine p1 = new MyLine(); 

    p1.x = x; 

    p1.y = y; 

} 

這是我的代碼這是怎麼回事?找不到標誌。符號 - 構造

,我得到的錯誤是

./MyLine.java:12: cannot find symbol 

symbol : constructor MyLine() 

location: class MyLine 

MyLine p1 = new MyLine(); 
+0

@posdef,無關緊要的問題。查看錯誤日誌。 – 2011-03-09 10:00:08

+0

似乎沒有給予足夠的重視,我刪除了評論,不會造成任何進一步的混亂。感謝您指出。 – posdef 2011-03-09 10:01:01

+1

@posdef現在旁路器被意見搞糊塗了,指的是已經消失的東西:) – Dunaril 2011-03-09 10:07:23

回答

0

這條線:

MyLine p1 = new MyLine(); 

應該被刪除。這是創建一個新的實例,你實際上想要與你正在創建的實例一起工作(因爲你在構造函數中。)你會得到這個錯誤,因爲你從這行中調用一個不存在的構造函數,但不管怎樣,你都不想這樣做。

您可以使用this關鍵字來引用當前實例(如果這些字段與參數名稱相同,在這種情況下看起來像是這樣,您需要執行此操作。)

所以考慮到這一點,你最終有以下:

public MyLine(double x, double y) { 
    this.x = x; 
    this.y = y; 
} 
7

不要實例化它的構造函數中。剛分配:

this.x = x; 
this.y = y; 

錯誤告訴你,你不會有一個無參數的構造函數,但是即使你有,該行爲不會如您所願

+0

到目前爲止的相關答案。 – 2011-03-09 10:01:01

1

提供默認的構造函數 即是添加

public MyLine(){} 

,它不有道理要創建本地對象的構造和分配值是..

改用

this.x=x; 

this.y=y; 
0

你構建內部似乎是MYLINE的構造MYLINE的一個實例。所以你寫的構造函數的調用者將會分配兩個對象。那是你要的嗎?

6

錯誤消息告訴您在MyLine類中沒有無參數構造函數。

您可以創建一個讓代碼編譯。

但是它看起來像你試圖在MyLine構造函數中實例化一個MyLine對象。你幾乎肯定不想這樣做。

相反,你要採取作爲參數傳遞的值並初始化與他們當前對象的字段:

public MyLine(double x, double y) 
{ 
    this.x = x; 
    this.y = y; 
} 
0

你真的要建立一個新的MYLINE對象而構建另一個MYLINE對象?

你真的要做到:

public MyLine(double x, double y) 
    { 

    this(); 

    this.x = x; 

    this.y = y; 

} 
+0

其中this()實際上是隱含的,所以你可能會錯過它......爲清晰起見在此添加 – katsharp 2011-03-09 10:01:39

0

你真的不應該實例化等內部構造一個新的MYLINE。爲什麼不能簡單地做:

public class MyLine { 

    private double slope; 
    private double constant; 

    // creates a new line: f(x) -> m*x + b 
    public MyLine(double m, double b) { 
    this.slope = m; 
    this.constant = b; 
    } 

    // ... 
} 
0

的問題是,一旦你自己創建一個構造函數,像public MyLine(double x, double y)編譯器將不添加public MyLine()默認構造函數自動。

如果你想使這個工廠方法,你應該返回p1,也許使它靜態。