创建setX(x)时遇到问题

时间:2011-04-23 16:17:41

标签: java methods

我写了以下内容:

public class Point
{
    private double _radius , _alpha;    

    public Point ( int x , int y )
    {
        //if one or more of the point values is <0 , the constructor will state a zero value.
        if (x < 0)  
        {
           x = 0;
        }

        if (y < 0)
        {
           y = 0;
        }
        _radius = Math.sqrt ( Math.pow(x,2) + Math.pow (y,2) ) ;
        _alpha = Math.toDegrees( Math.atan ((double)y/x) );
    }

    public Point (Point other) // copy constructor
    {
        this._radius = other._radius ;
        this._alpha = other._alpha ;
    }

    int getX()
    {
       return (int) Math.round ( Math.sin(_alpha)*_radius );
    }

    int getY()
    {
        return (int) Math.round ( Math.cos(_alpha)*_radius );   
    }

    void setX (int x)
    {

    }

}

我只是在写下setX(x),setY(y)方法而没有创建新对象时遇到问题... 有人可以帮我写setX()方法吗?

谢谢!

3 个答案:

答案 0 :(得分:1)

你可以这样做:

{
        int y = getY();
        _radius = Math.sqrt ( Math.pow(x,2) + Math.pow (y,2) ) ;
        _alpha = Math.toDegrees( Math.atan ((double)y/x) );
}

或者,如上所述,定义方法:

void setValues (int x, int y)
{
            _radius = Math.sqrt ( Math.pow(x,2) + Math.pow (y,2) ) ;
            _alpha = Math.toDegrees( Math.atan ((double)y/x) );
} 

然后: void setX(int x)

{
      setValues(x,getY());
}

答案 1 :(得分:0)

为什么不记录xy并仅在需要时计算半径和alpha。

你有这种方式

public void setX(double x) { _x = x; }
public double getX() { return _x; }
编辑:你可以这样做。

public Point(double x, double y) {
    setRadiusAlpha(x, y);
}

private void setRadiusAlpha(double x, double y) {
   if(x < 0) x = 0;
   if(y < 0) y = 0;
   _radius = Math.sqrt(x*x + y*y) ;
   _alpha = Math.toDegrees(Math.atan(y/x));
}

public void setX() { setRadiusAlpha(x, getY()); }
public void setY() { setRadiusAlpha(getX(), y)); }

答案 2 :(得分:0)

每当x或y发生变化时,您需要根据更改的新值和未更改的旧值重新计算半径和alpha。最简单的方法是移动将_radius和_alpha设置为自己的私有函数的计算(也许称为setXY),并从构造函数以及setX和setY调用该函数。