-1

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

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

}

gil9red
  • 77,085

1 Answers1

2

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

double s = perimeter()/2;

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

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

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

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

    double s = perimeter() / 2.0;
    
gil9red
  • 77,085