2016-10-05 3 views
0

Я пытаюсь изменить класс Circle для включения третьего конструктора для построения экземпляра Circle с двумя аргументами - двойным радиусом и строкой для цвета. Также измените основной класс, чтобы построить экземпляр 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)'. – shmosel

ответ

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); 
} 

Вы также можете захотеть взглянуть на использовании enum для ваших цветов, чтобы избежать проблем с футляром различиями (например, «красный» против «красного»). Вы всегда можете конвертировать между значением enum и String с использованием встроенных методов enumname() и valueOf(String).

Смежные вопросы