Создать абстрактный класс Фигур, дале создать пакет для фигур треугольников. И в нем создать классы следующих фигур:Треугольник
Равнобедренный треугольник
Равносторонний треугольник
Прямоугольный треугольникВ них, как мне показалось, логично создать методы для высчитывания площади и периметра. Получилась такая вот иерархия классов:
Shape (Абстрактный класс для всех Фигур): package shape;
import java.math.BigDecimal;
import java.math.RoundingMode;
public abstract class Shape {
private final double[] shapeParameters;
private double perimeter;
private double area;
public Shape(double[] shapeParameters) {
this.shapeParameters = shapeParameters;
calculatingPerimeter();
calculatingArea();
}
public double[] getShapeParameters() {
return shapeParameters;
}
public double getPerimeter() {
return perimeter;
}
public double getArea() {
return area;
}
public void setPerimeter(double perimeter) {
BigDecimal bigDecimalPerimeter = new BigDecimal(perimeter);
area = BigDecimalArea.setScale(2, RoundingMode.HALF_UP).doubleValue();
this.area = area;
}
abstract public void calculatingPerimeter();
abstract public void calculatingArea(); Далее переходим в пакет triangle -> В этом пакете класс Triangle наследуется от абстрактного класса Shape, а все последующие классы наследуются от класса Triangle
} Класс RightTriangle: public RightTriangle(double[] sides) {
super(sides);
}
@Override
public void calculatingArea() {
double[] sides = getShapeParameters();
setArea(0.5 * sides[0] * sides[1]);
} Класс IsoscelesTriangle: public IsoscelesTriangle(double[] sides) {
super(sides);
} Класс EquilateralTriangle: public EquilateralTriangle(double[] sides) {
super(sides);
} В чем собственно проблема: я не понимаю верно ли высчитываются площадь и периметр всех треугольников. Я в геометрии вообще ничего не понимаю. И когда попытался поискать формулы в интернете - запутался окончательно. Т.к. этих формул достаточно много, я толком не понял какие использовать оптемальнее всего. Может кто проверить, верно ли высчитываются формулы. Ну и в общем, что лучше изменить, переделать итд. Заранее спасибо!
Формулы для вычисления площади и периметра треугольников в вашем коде выглядят правильными. Однако, есть несколько рекомендаций и возможных улучшений:
1. В классе Shape можно добавить проверку входных параметров, чтобы убедиться, что передаваемый массив имеет правильную длину для каждой фигуры. Например, для треугольников это должен быть массив из 3 элементов.
2. В классе Triangle можно добавить проверку на то, является ли треугольник действительным (например, используя неравенство треугольника). Если треугольник недействителен, можно выбросить исключение или установить площадь и периметр в ноль.
3. Для вычисления площади прямоугольного треугольника можно использовать формулу: 0.5 * a * b, где a и b - катеты прямоугольного треугольника.
4. В классе EquilateralTriangle можно использовать более простую и точную формулу для вычисления площади: (sqrt(3) / 4) * a * a, где a - длина стороны равностороннего треугольника.
5. В методе setArea() класса Shape можно в названии переменной изменить "area" на "roundedArea", чтобы согласовать с названием переменной.
6. В методах calculatingPerimeter() и calculatingArea() не нужно каждый раз получать стороны фигуры через getShapeParameters(). Лучше получить этот массив один раз и сохранить его в локальную переменную.
7. Если формулы вычисления площади и периметра различных треугольников будут слишком сложными и запутанными, рекомендуется добавить комментарий к каждому методу, чтобы объяснить, какая формула используется и что она означает.
В целом, ваш подход к созданию иерархии классов и вычислению площади и периметра выглядит разумным. Однако, важно помнить о проверке входных данных и обеспечении правильности вычислений для каждого типа треугольника.
Абстрактный класс фигура излишне хранить стороны, т.к. фигура может быть определена не только сторонами (окружность, например)
Оставить в нем только методы расчета периметра и площади и все остальное удалить, тогда можно сделать интерфейсом
От него наследовать Треугольник и остальные от Треугольника, не от фигуры
В Треугольнике описание сторон массивом - слишком жирно и не удобно, может быть больше или меньше трех. Лучше сделать отдельные поля double a, double b, double c. Конструктор от 3 параметров. Площадь и периметр не хранить в полях, а только вычислять.
Описать реализацию периметра и площади универсального треугольника.
От него отнаследовать равносторонний. Конструктор от одного параметра - одной стороны. Периметр и площадь от треугольника остаются без изменений.
Равнобедренный треугольник - конструктор от 2 сторон, например, одинаковой и неодинаковой. Периметр и площадь аналогично от базового.
Прямогуольный треугольник - можно переопределить метод площади по формуле прямоугольного треугольника.
Просили без жпт, но лайкаете жпт.
Могу в зуме подробней рассказать.
Данный код выглядит правильным. В классе Triangle вычисляется периметр и площадь треугольника, используя формулу Герона. В классе RightTriangle вычисляется площадь прямоугольного треугольника, а в классе IsoscelesTriangle и EquilateralTriangle можно добавить методы для вычисления площади и периметра соответствующих треугольников. Если вы хотите проверить правильность вычислений, то можете использовать формулы, которые приведены в поисковых результатах. Например, для прямоугольного треугольника площадь можно вычислить как половину произведения катетов, а периметр - как сумму длин всех сторон. Если у вас есть конкретные значения сторон треугольников, то вы можете проверить правильность вычислений, используя эти формулы.