2017-10-17 202 views
-5

我剛開始在一個學校項目中使用Java進行一些編碼。現在我真的堅持這個任務。 在這個任務中,我必須創建一個Point p,並以我提出的方式獲取x和y。但是現在,當我運行我的JUnit測試(給出測試)時,我得到一個StackOverflowError。我不確定我做錯了什麼,有人可以幫助我嗎?使用構造函數的Stackoverflowerror

public class Point { 
    double x; 
    double y; 

    public Point (double x1, double y1){ 
     x = x1; 
     y = y1; 

     Point p = new Point (2.0, 5.0); 

     p.getY(); 
     p.getX(); 
    } 

    public double getY(){ 
     return y; 
    } 

    public double getX(){ 
     return x; 
    } 
} 
+1

爲什麼你創建另一個點(' Point p = new Point(2.0,5.0);')在構造函數中? – Eran

+2

在創建'Point'時創建一個'Point'。遞歸構造導致你的錯誤 – AxelH

+0

你應該調用'Point p = new Point(2.0,5.0);'從某種外部方法,我認爲 –

回答

1

這裏你不需要你的實例Point p

首先,因爲這是一個遞歸方法(此處爲構造函數),導致無限實例化Point,導致您的StackOverflowError

其次,你沒有做任何事情,即使是沒有使用吸氣劑。

最後,你可能想要的是把這些代碼在一個public static void main(String[] args)來測試你的類

public static void main(String[] args){ 
    Point p = new Point (2.0, 5.0); 
    System.out.println("Y = " + p.getY()); 
    System.out.println("X = " + p.getX()); 
} 

所以刪除您的構造函數的最後一行

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

@ScaryWombat很好的接收!隨時編輯我的答案,我不咬;) – AxelH