2013-03-22 3 views
0

Я знаю, как поместить ценность из одного класса в другой. Просто здесь это не работает. Я не понимаю, почему.Нельзя использовать значение в разных классах

Пожалуйста, помогите мне найти ошибку.

Когда я пытаюсь получить значение:

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

строки 'с = новым CartesianCoordinate (х, у);' тени параметра вы передаете - это ваше намерение? – jedwards

+0

В приведенном ниже примере кода никакие значения никогда не присваиваются x и y вызова конструктора «new CartesianCoordinate (x, y)». Боковое замечание: переменные экземпляра в CartesianCoordinate должны быть частными. – tbsalling

ответ

0

В следующей строке:

c = new CartesianCoordinate(x,y); 

вы создаете новый экземпляр со значениями Velocity экземпляра частных полей x и y, которые установлены в 0 по умолчанию.

Кстати, нет смысла передавать экземпляр CartesianCoordinate в качестве параметра конструктора, а затем повторно инициализировать его внутри самого конструктора. Либо вы передаете x и y значениям, например 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 
} 

В строке 1 Вы теневой параметр вы проходящий. Это означает, что вы «перезаписываете» значение c с новым CartesianCoordinate, инициализированным x и y, которые в этот момент равны 0 (поскольку вы не инициализировали удвоения).

Если вы удалите строку 1, вы, по крайней мере, получите xCartesianCoordinate, которую вы передадите.

1

c = new CartesianCoordinate(x,y); Этот вызов конструктора является назначение x = 0 и y = 0 для переменных-членов x и y из CartesianCoordinate class.This так, потому что в пределах Velocity класса x и y обеспечиваются значения по умолчанию 0, как вы никогда не изменяли его. Таким образом, вы получаете 0 для c.getX() и c.getY()

0

Просто удалите

с = новый CartesianCoordinate (х, у);

от Velocity конструктора

0

х, у переменных не были инициализированы, так что вы всегда получите 0

Смежные вопросы