我写了以下代码:
public class Point2
{
private double _radius , _alpha;
public Point2 ( 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 Point2 (Point2 other) // copy constructor
{
this._radius = other._radius ;
this._alpha = other._alpha ;
}
public int getX()
{
return (int) Math.round ( Math.sin(_alpha)*_radius );
}
public int getY()
{
return (int) Math.round ( Math.cos(_alpha)*_radius );
}
public void setX (int x)
{
if (x >=0 )
{
_radius = Math.sqrt ( Math.pow (x,2) + Math.pow(getY(),2) );
_alpha = Math.toDegree ( Math.atan ((double)getY()/x));
}
}
}
问题是编译器给出了一个错误:
_alpha = Math.toDegrees( Math.atan ((double)y/x) );
它说:"*cannot find symbol - method toDegree(double); maybe you meant: toDegrees(double)* "
什么似乎是问题?
谢谢!
答案 0 :(得分:7)
阅读你的代码!
_radius = Math.sqrt ( Math.pow (x,2) + Math.pow(getY(),2) );
_alpha = Math.toDegree ( Math.atan ((double)getY()/x));
该行表示Math.toDegree而不是toDegrees!
答案 1 :(得分:4)
因为您想使用toDegrees()
答案 2 :(得分:2)
我质疑设置负x和y输入值等于零的智慧。为客户谈论一个令人讨厌的惊喜!在大多数情况下,负值是有意义的。你有半径和theta作为成员变量的事实表明这些是复杂平面中的点。负x和y值确实有意义。
我也同意在变量名中丢失那些可怕的下划线的建议。当IDE可以很容易地突出显示成员变量时,它们在当今时代并不是必需的。如果您愿意,可以为this.
添加前缀。下划线只是来自C ++和emacs的丑陋神器。
答案 3 :(得分:1)
可能不相关,但如果x小于或等于零,则代码将会破坏块。你不能除以零。
另外,我是唯一一个看到他的代码已使用复数的人吗?似乎编译器很困惑。