Перегрузка конструктора, как мне действовать? - PullRequest
1 голос
/ 06 января 2020

В моем задании мы практикуем перегрузку конструктора (на бумаге). Я должен реализовать эти 3 конструктора (заполнить), и главный конструктор должен сгенерировать окружность с координатами (0,0) и радиусом 1. Я уже пытался реализовать первые два конструктора, но не знаю, что делать в третьем конструкторе. Как всегда, спасибо вам, ребята, за вашу помощь.

public class Center
{
    public double x;
    public double y;
}

public class Circle
{
    private Center c;
    private double radius;

    public Circle()
    {
        this(0, 0, 1); //TO-DO
    }

    public Circle(Center c, double radius)
    {
        this(0, 0, radius); //TO-DO
    }

    public Circle(double x, double y, double radius)
    {
        //TO-DO
    }
}

Ответы [ 3 ]

3 голосов
/ 06 января 2020

Примерно так:

public Circle() {
    this(0,0,1); 
}

public Circle(Center c, double radius){
    this(c.x, c.y,radius); //you need to use the center's coordinates
}

public Circle(double x, double y, double radius) {
    this.c = new Center(x, y);
    this.radius = radius;
}
3 голосов
/ 06 января 2020

Вы должны присвоить значения соответствующим переменным здесь:

public Circle(double x, double y, double radius) {
    this.c = new Center();
    this.c.x = x;
    this.c.y = y;
    this.radius = radius;
}

И ваш второй конструктор должен выглядеть так:

public Circle(Center c, double radius){
    this(c.x,c.y,radius); 
}
0 голосов
/ 06 января 2020

Из-за того, что ваш класс определен:

public class Circle {
    private Center c;
    private double radius;
    ...
}

Ключевыми моментами здесь являются переменная c класса Center и переменная radius типа примитива double, вам нужно определить оба.

Как видите, третий конструктор предоставляет вам три переменные: x, y и radius. Единственный способ сопоставления этих трех с c и radius:

public Circle(double x, double y, double radius) {
    c = new Center(x, y);
    this.radius = radius; //here you must use `this` reference to avoid
    //collision between the radius variable from the class and its 
    //counerpart from the constructor.
}

. В этом конструкторе мы создаем новый Center для удовлетворения переменной c, помещаем туда x и y, как это требуется в объявлении конструктора Center. Также мы присваиваем переменную radius.

...