#java
#java
Вопрос:
Я пытаюсь изменить класс Circle, чтобы включить третий конструктор для создания экземпляра Circle с двумя аргументами — double для radius и String для color . Также измените основной класс, чтобы создать экземпляр Circle с помощью этого конструктора. У меня возникли проблемы с этим, я продолжаю получать сообщение о том, что конструктор Circle никогда не используется. Пожалуйста, взгляните на код.
public class Circle {
private double radius;
private String color;
public Circle() {
radius = 1.0;
color = "red";
}
public Circle(double r) {
radius = r;
color = "Blue";
}
public Circle(double r, String c) {
radius = r;
color =c;
}
public double getRadius() {
return radius;
}
public void setRadius(double newRadius) {
radius = newRadius;
}
public String getColor()
{
return color;
}
public void setColor(String newColor) {
color=newColor;
}
public double getArea() {
return radius*radius*Math.PI;
}
}
public class Main {
public static void main(String[] args) {
Circle c1 = new Circle();
System.out.println("The circle has radius of " c1.getRadius());
System.out.println("and area of " c1.getArea());
Circle c2 = new Circle(2.5);
System.out.println("The circle has radius of " c2.getRadius());
System.out.println("and area of " c2.getArea());
Circle c3 = new Circle(0.5);
c3.setColor("Green");
System.out.println("The circle has radius of "
c3.getRadius());
System.out.println("and area of " c3.getArea());
System.out.println("color is: " c3.getColor());
Circle c5 = new Circle();
c5.setRadius(500.0);
System.out.println("radius is: " c5.getRadius());
c5.setColor("Yellow");
System.out.println("color is: " c5.getColor());
}
}
Комментарии:
1. Вы не используете перегрузку третьего конструктора
Circle(double r, String c)
.
Ответ №1:
Ну, вы его не используете, поэтому сообщение вряд ли должно быть сюрпризом. Просто вставьте вызов конструктора с двумя аргументами где-нибудь (например, Circle c3 = new Circle(0.5, "Green");
), и сообщение должно исчезнуть. Конечно, если вы измените все создания экземпляра на конструктор с двумя аргументами, вы получите предупреждение для версий с нулевым и одним аргументом.
Кроме того, вы можете изменить определения своих конструкторов:
public class Circle {
public Circle() {
this(1.0, "red");
}
public Circle(double r) {
this(r, "Blue");
}
public Circle(double r, String c) {
radius = r;
color = c;
}
...
}
Однако я должен сказать, что странно иметь значение по умолчанию для цвета «красный», когда вы используете радиус по умолчанию, и «Синий», когда вы указываете радиус. Я бы рекомендовал против этого, и в этом случае я бы изменил первый конструктор на:
public Circle() {
this(1.0);
}
Вы также можете рассмотреть возможность использования an enum
для ваших цветов, чтобы избежать проблем с различиями в регистре (например, «красный» и «Красный»). Вы всегда можете преобразовать enum
значение из an в a String
, используя встроенные enum
методы name()
и valueOf(String)
.