不能在不同的类中使用值

时间:2013-03-22 19:15:44

标签: java coordinate

我知道如何将价值从一个类别转移到另一个类别。 就在这里,它不起作用。我不明白为什么。

请帮我找一个错误。

当我试图获得价值时:

 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;
    }
}

5 个答案:

答案 0 :(得分: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行,您将影响您传递的参数。这意味着您使用cCartesianCoordinate初始化的全新x“覆盖”y的值,此时,它们都为0(因为您没有初始化双打)。

如果您删除第1行,则至少会获得通过它的x CartesianCoordinate

答案 1 :(得分:1)

c = new CartesianCoordinate(x,y); 此构造函数调用为x = 0类的成员变量y = 0x分配yCartesianCoordinate。这是因为在Velocity类中{ {1}}和x提供了默认值y,因为您从未更改过它。因此,您00

获得了c.getX()

答案 2 :(得分:0)

只需删除

c = new CartesianCoordinate(x,y);

来自Velocity构造函数的

答案 3 :(得分:0)

以下一行:

c = new CartesianCoordinate(x,y);

您正在创建一个值为Velocity实例私有字段xy的新实例,默认设置为0。

顺便说一句,将CartesianCoordinate实例作为构造函数参数传递,然后在构造函数本身内重新初始化是没有意义的。您可以传递xy之类的值public Velocity(int x, int y),也可以只指定坐标。

将来,您需要了解Point2D课程。

答案 4 :(得分:0)

x,y变量尚未初始化,因此您总是收到0