Java Вызов метода

Подскажите пожалуйста один момент. Я создаю объект класса многоугольник, вызываю метод и получаю результат на экране. Почему не отрабатывает метод с подсчетом площади треугольника?В чем проблема?

    class Polygon {
    int sideLengths[];
    int numSides =0;

    public Polygon(int [] lengths){
      sideLengths = lengths;
      numSides = lengths.length;
    }
  
    public int perimeter() {
  
      int sum = 0;
      for (int i = 0 ; i <  sideLengths.length ;i++) {
        sum += sideLengths[i];
      }
      return sum;
    }

   
  }

   class Triangle extends Polygon {

    public Triangle(int [] lengths) {
      super(lengths);  
      numSides = 3;
    }
    public Triangle () {
      this(new int[3]);
    }
    

    public double area (){
      double s = perimeter()/2;
      //формула Герона
      return Math.sqrt(s*(s- sideLengths[0])*(s- sideLengths[1])*(s - sideLengths[2]));
    }
  }
public class ThirdLab {

    public static void main(String[] args) {
        
        int[] lengths = new int[]{2, 2, 3};
        Polygon test_polygon = new Polygon(lengths);
        double t = test_polygon.perimeter();
        
        int[] lengths1 = new int[]{2, 2, 3};
        Triangle triangle1 = new Triangle(lengths1);
        double t1 = triangle1.area();
        
        System.out.println(t);
        System.out.println(t1);
    }
}

Ответы (1 шт):

Автор решения: gil9red

Причина проблемы была в потере вещественной части при выполнении:

double s = perimeter()/2;

Т.к. метод perimeter возвращал целое число и деление тоже было на целое число.

Варианты решения:

  • Возвращать из perimeter вещественное число. Понадобится в классе Polygon поменять типы на вещественные в поле sideLengths, в параметре конструктора lengths, в методе perimeter (возвращаемое значение и у переменной sum)

  • Делить на вещественное число:

    double s = perimeter() / 2.0;
    
→ Ссылка