2013-03-22 51 views
0

我知道如何把價值從一類到另一個利用價值。 就在這裏它不起作用。我不明白爲什麼。不能在不同的班級

請幫我找到一個bug。

當我試圖讓值:

c = new CartesianCoordinate(x, y); 
x = c.getX(); 

它始終是零。

public class Velocity 
{ 
    // instance variables - replace the example below with your own 
    private double x; 
    private double y; 
    /** 
    * Constructor for objects of class Velocity 
    */ 
    public Velocity(CartesianCoordinate c) 
    { 
     // initialise instance variables 
     c = new CartesianCoordinate(x,y); 
     x = c.getX(); 
     System.out.println(c.getX()); 
     System.out.println(c.getY()); 
     System.out.println(c.x); 

    } 

    public double getX() 
    { 
     return x; 
    } 

這裏是我的CartesianCoordinate:

public class CartesianCoordinate 
    { 
     // instance variables - replace the example below with your own 
     public double x; 
     public double y; 

     /** 
     * Constructor for objects of class CartesianCoordinate 
     */ 
     public CartesianCoordinate(double x, double y) 
     { 
      // initialise instance variables 
      this.x = x; 
      this.y = y; 
     } 




    public void setX(double x) 
    { 
     // put your code here 
     this.x = x; 
    } 

    public void setY(double y) 
    { 
     this.y = y; 
    } 

    public double getX() 
    { 
     return x; 
    } 

    public double getY() 
    { 
     return y; 
    } 
} 
+2

行'C =新CartesianCoordinate(X,Y);'陰影你傳遞的參數 - 這是你的意圖? – jedwards 2013-03-22 19:17:49

+0

在您給出的示例代碼中,沒有值被分配給構造函數調用'new CartesianCoordinate(x,y)'的x和y。備註:CartesianCoordinate中的實例變量應該是私有的。 – tbsalling 2013-03-22 19:21:55

回答

0

在下面一行:

c = new CartesianCoordinate(x,y); 

要創建一個使用Velocity例如私有字段xy,這是默認設置爲0的值的新實例。

順便說一句,這是沒有意義的傳遞CartesianCoordinate實例作爲構造函數的參數,然後重新初始化它的構造函數本身內。無論你通過xy值像public Velocity(int x, int y),或者你只是指定的座標。

在未來,你會想知道Point2D類。

4
public Velocity(CartesianCoordinate c) 
{ 
    // initialise instance variables 
    c = new CartesianCoordinate(x,y); // 1 
    x = c.getX();      // 2 
    System.out.println(c.getX());  // 3 
    System.out.println(c.getY());  // 4 
    System.out.println(c.x);   // 5 
} 

在第一行,你的影子,你要傳遞的參數。這意味着你要「覆蓋」的c值與新CartesianCoordinate一個品牌xy,其中,在這一點上,是既初始化爲0(因爲你還沒有初始化雙打)。

如果您刪除第1行,您至少會獲得通過它的CartesianCoordinatex

1

c = new CartesianCoordinate(x,y); 此構造函數調用成員變量分配x = 0y = 0xCartesianCoordinate class.This y是因爲Velocity類中xy設有默認值0因爲你從來沒有改變過它。所以,你得到了0c.getX()c.getY()

0

只是刪除

C =新CartesianCoordinate(X,Y);

從速度構造

0

X,Y變量沒有被初始化,所以你總是收到0