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;