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

这是我的笛卡尔坐标:

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

5 回答 5

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 行,您隐藏了正在传递的参数。这意味着你正在用一个用and初始化c的全新的值“覆盖” ,此时它们都是 0 (因为你还没有初始化双精度数)。CartesianCoordinatexy

x如果您删除第 1 行,您至少会CartesianCoordinate通过它。

于 2013-03-22T19:20:18.137 回答
1

c = new CartesianCoordinate(x,y); 此构造函数调用为成员变量和类分配x = 0和。这是因为在类中并提供了默认值,因为您从未更改过它。所以你得到了y = 0xyCartesianCoordinateVelocityxy00c.getX()c.getY()

于 2013-03-22T19:20:32.787 回答
0

只需删除

c = 新笛卡尔坐标(x,y);

从速度构造函数

于 2013-03-22T19:22:00.937 回答
0

在以下行中:

c = new CartesianCoordinate(x,y);

Velocity您正在使用实例私有字段x和的值创建一个新实例,y默认情况下它们设置为 0。

顺便说一句,将CartesianCoordinate实例作为构造函数参数传递,然后在构造函数本身内部重新初始化它是没有意义的。要么传递x和之y类的值public Velocity(int x, int y),要么只分配坐标。

将来,您会想了解Point2D课程。

于 2013-03-22T19:22:55.153 回答
0

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

于 2013-03-22T19:27:09.053 回答