2015-12-07 4 views
0

Итак, у меня есть вопрос с двумя вопросами. Первая часть, которую я сделал, создала интерфейс, а затем использовала этот интерфейс в двух разных классах. Однако вторая часть вопроса меня озадачила. Я не понимаю логический аспект этого. Кажется, что вопрос должен быть обратным. Это две вещи, которые мне нужно сделать, чтобы закончить последнюю часть задания. Если бы кто-нибудь здесь мог дать мне лишь небольшое руководство относительно того направления, которое я должен принять, я бы очень признателен.Создание метода, который принимает массив объектов интерфейса

Часть II: (1) Создайте массив вычисляемых объектов в главном и вызовите метод sumCalculate.

По большей части я это понимаю, я уже начал это делать, но решил начать работу над (2), поскольку для меня это было труднее. Это в основном создание массива Calculatable объектов определенного размера (я выбрал 5) и заполнения его различными вычислимыми объектами (в моем примере могут быть прямоугольники или квадраты). Но вторая половина этого вопроса меня смущает? Могу ли я назвать метод sumCalculate, который я буду делать в вопросе 2? Или я называю это, прежде чем я даже сделаю метод (2).

(2) Сделать метод, который принимает массив вычисляемых объектов и суммирует значения, возвращаемые вызовом каждого объекта для вычисления.

Что я пытаюсь выяснить здесь (2), так это. Когда он просит меня сделать метод? Означает ли это, что я создаю новый метод в интерфейсе sumCalc, например, который имеет параметры, которые принимают массив вычисляемых объектов? А затем, если суммировать возвращаемые значения. Я бы предположил, что я бы добавил двойной расчет, который возвращается методами расчета.

Я бы попросил моего профессора, но этот профессор, которого я решил принять, сделал привычкой к тому, чтобы быть слишком труднодоступным. Извините, что беспокоите вас, ребята, что, скорее всего, является элементарным и не сложным вопросом.

interface Calculatable { 

    public double calculate(int x); 



} 

class square implements Calculatable { 

    public double side; 


    square(double side){ 
     this.side = side; 
    } 

    public double getside(){ 
     return side; 
    } 

    public double calculate(int x) { 
     double perimeter = side * 4; 
     System.out.println("This calculate method will output the perimeter divided by the parameter x"); 
     double calculation = perimeter/x; 
     System.out.println("The original perimeter was " + perimeter + ". And the calculated perimeter is " + calculation +"."); 
     return calculation; 
    } 


} 

public class rectangle implements Calculatable { 

    public double length; 
    public double width; 

    rectangle(double length , double width){ 

     this.length = length; 
     this.width = width; 
    } 

    public double getlength(){ 
     return length; 
    } 
    public double getwidth(){ 
     return width; 
    } 

    public double calculate(int x) { 
     double perimeter = 2 * (length + width); 
     double calculation = 2 * perimeter; 
     System.out.println("This will return the perimeter of the rectangle times the x paramater"); 
     System.out.println("Your current perimeter is " + perimeter + " and your perimeter after the calculation is " + calculation + "."); 
     return calculation; 

    } 


    public static void main(String [] args){ 

     Calculatable perimeter1 = new rectangle(20.5 , 50); 
     perimeter1.calculate(5); 
     Calculatable perimeter2 = new square(10.5); 
     perimeter2.calculate(2); 
     Calculatable[] perimetersums = new Calculatable[5]; 
     perimetersums[0] = new rectangle(20.5 , 50); 
     perimetersums[1] = new rectangle(10 , 25); 


    } 
} 
+2

'x' никогда не используются в вашем' метода calculate' – vojta

+0

я вижу, что х используются в одном из случаев, но это кажется действительно странным, что расчет принимает параметр. Что касается вопросов, я получаю впечатление, несмотря на запутанную формулировку, что sumCalculate() - это метод, который вам нужно реализовать в (2). –

+0

Да, профессор в основном хотел, чтобы у него был какой-то параметр по какой-то причине. Полагаю, только ради этого. Она хотела нас, и это по ее собственным словам, чтобы иметь метод, который «возвращает двойной, основанный на некоторых вычислениях, которые выполняются с элементами данных и целочисленным параметром». – Nathan

ответ

1

Я бы создал sumCalculate рядом с основным методом и закончил с ним. Урок - реализовать метод интерфейса и использовать его.

И кроме того, я предлагаю прочитать соглашение об именовании Java и исправлять ваш код соответствующим образом.

+0

Большое спасибо. Я уже слишком усложнял это длинным выстрелом, затем LOL. Как только вы объяснили это, я понял, насколько смешно это делаю. Спасибо! Также я собираюсь работать над конвенциями java в свое время, когда закончу этот курс. У меня не было много времени, чтобы действительно забивать конвенции, насколько короче наши крайние сроки. Плюс мой профессор никогда не говорит о соглашениях об именах на всех T_T. Цените помощь! – Nathan

1

Как я понимаю, вы не должны изменять интерфейс, особенно если интерфейс был предоставлен вам!

Просто напишите ваш sumCalculate ниже вашего main метода, как этот

private static double sumCalculate(Calculateable[] c) { 
    // do your sum up and return the result 
} 

и вызвать его в основной метод, как этот

double sum = sumCalculate(perimetersums); 
+0

Большое спасибо. Я закончил делать это именно так, как вы описали здесь. Думаю, я слишком много думал о чрезмерном использовании интерфейсов, когда на самом деле это было намного проще. – Nathan

0

несколько путаницы в моем уме .. В реализации Прямоугольник ваш не используют x в методе расчета. Я немного изменил структуру класса .. Пожалуйста, посмотрите .. Я думаю, это поможет вам ...

public interface Calculatable { 

    public double calculate(int x); 

    public double getPerimeter(); 

} 

public class square implements Calculatable { 

    public double side; 
    private double perimeter; 


     square(double side){ 
      this.side = side; 
     } 

     public double getside(){ 
      return side; 
     } 

     public double calculate(int x) { 
      double perimeter = side * 4; 
      System.out.println("This calculate method will output the perimeter divided by the parameter x"); 
      double calculation = perimeter/x; 
      System.out.println("The original perimeter was " + perimeter + ". And the calculated perimeter is " + calculation +"."); 
      this.perimeter=calculation; 
      return calculation; 
     } 

    @Override 
    public double getPerimeter() { 
     // TODO Auto-generated method stub 
     return perimeter; 
    } 
} 


public class rectangle implements Calculatable { 

     public double length; 
     public double width; 

     private double perimeter; 

     rectangle(double length , double width){ 

      this.length = length; 
      this.width = width; 
     } 

     public double getlength(){ 
      return length; 
     } 
     public double getwidth(){ 
      return width; 
     } 

     public double calculate(int x) { 
      double perimeter = 2 * (length + width); 
      double calculation = 2 * perimeter; 
      System.out.println("This will return the perimeter of the rectangle times the x paramater"); 
      System.out.println("Your current perimeter is " + perimeter + " and your perimeter after the calculation is " + calculation + "."); 
      this.perimeter=calculation; 
      return calculation; 
     } 

    @Override 
    public double getPerimeter() { 
     // TODO Auto-generated method stub 
     return perimeter; 
    } 


} 



public class MainMethod { 

    public static void main(String[] args) { 

     Calculatable perimeter1 = new rectangle(20.5 , 50); 
      perimeter1.calculate(5); 
      Calculatable perimeter2 = new square(10.5); 
      perimeter2.calculate(2); 
      Calculatable[] perimetersums = new Calculatable[5]; 
      perimetersums[0] = perimeter1; //new rectangle(20.5 , 50); 
      perimetersums[1] = perimeter2;// new rectangle(10 , 25); 

      System.out.println("the sum is= "+sumCalculate(perimetersums)); 
    } 


    private static double sumCalculate (Calculatable[] perimetersums) 
    { 
     double sum=0.0; 
     for(int i=0;i<perimetersums.length;i++) 
     { 
      Calculatable cal=perimetersums[i]; 
      if(cal!=null) 
      sum=sum+cal.getPerimeter(); 
     } 
     return sum; 
    } 

} 
+0

Ваше решение не очень хорошее. Предполагается, что пользователь вызывает метод вычисления() перед вызовом getPerimeter(), иначе результат будет неправильным. Такие предположения являются запахами кода. –

+0

@TaaviIlves ... вы также можете вызвать метод вычисления из метода sumCalculate(). Базически сигнатура метода расчета не идеальна .. вызов метода вычисления из sumCalculate() не является сделкой grt. – kaushik

+0

Правда, что расчет подписи не очень хорош. Я бы решил эту проблему более OO-способом и представил новый класс, который содержит Calculatable и x. Ваше решение очень хрупок для рефакторинга. –

0

Я немного изменил структуру класса ...

public interface Calculatable { 

    public double calculate(); 
} 



public class square implements Calculatable { 

    private final int x=2; 
    public double side; 

     square(double side){ 
      this.side = side; 
     } 

     public double getside(){ 
      return side; 
     } 

     public double calculate() { 
      double perimeter = side * 4; 
      System.out.println("This calculate method will output the perimeter divided by the parameter x"); 
      double calculation = perimeter/x; 
      System.out.println("The original perimeter was " + perimeter + ". And the calculated perimeter is " + calculation +"."); 
      return calculation; 
     } 


} 

public class rectangle implements Calculatable { 

     private final int x=5; 
     public double length; 
     public double width; 


     rectangle(double length , double width){ 

      this.length = length; 
      this.width = width; 
     } 

     public double getlength(){ 
      return length; 
     } 
     public double getwidth(){ 
      return width; 
     } 

     public double calculate() { 
      double perimeter = 2 * (length + width); 
      double calculation = 2 * perimeter; 
      System.out.println("This will return the perimeter of the rectangle times the x paramater"); 
      System.out.println("Your current perimeter is " + perimeter + " and your perimeter after the calculation is " + calculation + "."); 
      return calculation; 
     } 


} 

public class MainMethod { 

    public static void main(String[] args) { 

     Calculatable perimeter1 = new rectangle(20.5 , 50); 
     // perimeter1.calculate(5); 
      Calculatable perimeter2 = new square(10.5); 
      //perimeter2.calculate(2); 
      Calculatable[] perimetersums = new Calculatable[5]; 
      perimetersums[0] = new rectangle(20.5 , 50); 
      perimetersums[1] = new rectangle(10 , 25); 

      System.out.println("the sum is= "+sumCalculate(perimetersums)); 
    } 


    private static double sumCalculate (Calculatable[] perimetersums) 
    { 
     double sum=0.0; 
     for(int i=0;i<perimetersums.length;i++) 
     { 
      Calculatable cal=perimetersums[i]; 
      if(cal!=null) 
      { 
       sum=sum+cal.calculate(); 
      } 
     } 
     return sum; 
    } 

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