可能是一个演员问题 - Java

时间:2011-04-23 21:18:03

标签: java casting

我写了以下代码:

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)* "

什么似乎是问题?

谢谢!

4 个答案:

答案 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小于或等于零,则代码将会破坏块。你不能除以零。

另外,我是唯一一个看到他的代码已使用复数的人吗?似乎编译器很困惑。