Вопрос Помогите проверить задачу на java

Регистрация
13 Дек 2012
Сообщения
97
Репутация
6
Спасибо
0
Монет
0
Есть часть задачи:

Создать абстрактный класс Фигур, дале создать пакет для фигур треугольников. И в нем создать классы следующих фигур:Треугольник

Равнобедренный треугольник

Равносторонний треугольник

Прямоугольный треугольникВ них, как мне показалось, логично создать методы для высчитывания площади и периметра. Получилась такая вот иерархия классов:

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

BigDecimal roundedPerimeter = bigDecimalPerimeter.setScale(2, RoundingMode.HALF_UP);

this.perimeter = roundedPerimeter.doubleValue();

}

public void setArea(double area) {

BigDecimal BigDecimalArea = new BigDecimal(area);

area = BigDecimalArea.setScale(2, RoundingMode.HALF_UP).doubleValue();

this.area = area;

}





abstract public void calculatingPerimeter();

abstract public void calculatingArea(); Далее переходим в пакет triangle -> В этом пакете класс Triangle наследуется от абстрактного класса Shape, а все последующие классы наследуются от класса Triangle

Класс Triangle: public Triangle(double[] sides) {

super(sides);

}



public void calculatingPerimeter(){

double[] sides = getShapeParameters();

setPerimeter(sides[0] + sides[1] + sides[2]);

}

public void calculatingArea(){

double[] sides = getShapeParameters();

double semiPerimeter = getPerimeter() / 2;

setArea(Math.sqrt(semiPerimeter * (semiPerimeter - sides[0]) * (semiPerimeter - sides[1]) * (semiPerimeter - sides[2])));

} Класс 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 можно добавить методы для вычисления площади и периметра соответствующих треугольников. Если вы хотите проверить правильность вычислений, то можете использовать формулы, которые приведены в поисковых результатах. Например, для прямоугольного треугольника площадь можно вычислить как половину произведения катетов, а периметр - как сумму длин всех сторон. Если у вас есть конкретные значения сторон треугольников, то вы можете проверить правильность вычислений, используя эти формулы.
 
зачем повторять вопрос?
и похоже что просто сливаешь код, который тебе в прошлый раз жертва жпт слила...
 
Назад
Сверху