我写了以下内容:
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()方法吗?
谢谢!
答案 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)
为什么不记录x
和y
并仅在需要时计算半径和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调用该函数。