Возникли проблемы при создании setX (x) - PullRequest
0 голосов
/ 23 апреля 2011

Я написал следующее:

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 ]

1 голос
/ 23 апреля 2011

Вы можете сделать это:

{
        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());
}
0 голосов
/ 23 апреля 2011

Всякий раз, когда x или y изменяется, вам нужно пересчитать радиус и альфа на основе нового значения, которое изменилось, и старого, которое не изменилось.Самый простой способ сделать это - переместить вычисление, которое устанавливает _radius и _alpha в свою собственную частную функцию (возможно, назовите ее setXY), и вызвать эту функцию из конструктора, а также из setX и setY.

0 голосов
/ 23 апреля 2011

Почему бы вам не записать x и y и вычислять радиус и альфа только тогда, когда вам это нужно.

Таким образом, у вас есть

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)); }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...