#javascript #class #math
Вопрос:
В настоящее время я пытаюсь решить проблему следующим образом:
Реализуйте иерархию объектов, содержащую по крайней мере классы для прямоугольника, треугольника и круга. Реализуйте функцию float SumArea (), которая будет перебирать контейнер этих фигур размером n и суммировать их площадь. Также реализуйте функции void AddTriangle(поплавок b, поплавок h), void AddSquare(размер поплавка), void addCircle(радиус поплавка).
- Примечание 1: Вам нужно написать только одну функцию для каждого класса (плюс конструктор).
- Примечание 2: Требуется общая сумма областей, независимо от того, перекрываются ли фигуры.
- Примечание 3. Постарайтесь сделать код итерации как можно более оптимальным.
До сих пор мне удавалось писать классы для фигур, а также метод для каждого из них для вычисления их площади (вопрос немного сбивает с толку, поскольку в нем говорится, что прямоугольник, но затем в классе ответов есть функция addsquare). Я также добавил области вместе в общую область, но немного не понимаю, как я могу рассчитать площадь, даже если фигуры перекрываются в контейнере?
Вот что у меня есть до сих пор:
class Rectangle {
constructor(size) {
this.size = size;
}
area() {
return this.size * this.size;
}
}
class Triangle {
constructor(base, height) {
this.base = base;
this.height = height;
}
area() {
return this.base * this.height / 2;
}
}
class Circle {
constructor(radius) {
this.radius = radius;
}
area() {
return Math.PI * this.radius ** 2;
}
}
class Answer {
addTriangle(b, h) {
const triangle = new Triangle(b, h);
return triangle.area();
}
addSquare(size) {
const rectangle = new Rectangle(size);
return rectangle.area();
}
addCircle(radius) {
const circle = new Circle(radius);
return circle.area();
}
sumArea() {
return Answer.addTriangle Answer.addSquare Answer.addCircle;
}
}
Любая помощь будет очень признательна.
Комментарии:
1. «но я немного теряюсь в том, как я могу рассчитать площадь, даже если фигуры перекрываются в контейнере» — Примечание 2 говорит вам игнорировать это. Просто сложите отдельные области.
2. «контейнер» означает коллекцию (структуру данных) для хранения фигур.
sumArea
повторит один из них и вернет сумму областей. Ваша реализация этого не делает.3. Чтобы расширить это ^ У вашего
Answer
класса должно бытьcontainer: []
свойство. Вашиadd<Shape>
функции должны поместить новую фигуру в этот массив. ЗатемsumArea
следует повторитьcontainer
и сложить все области (reduce
это то, что вы хотите там)
Ответ №1:
Ваша реализация не работает с контейнером, как предписывает вам задание. Для этого требуется сохранить список фигур, которые вы повторяете при вызове sumArea
метода
Он-фрагмент, который поможет вам в правильном направлении:
class Rectangle {
constructor(size) { this.size = size; }
area() { return this.size * this.size; }
}
class Triangle {
constructor(base, height) { this.base = base; this.height = height; }
area() { return this.base * this.height / 2; }
}
class Circle {
constructor(radius) { this.radius = radius; }
area() { return Math.PI * this.radius ** 2; }
}
class Answer {
container = [];
addTriangle(b, h) {
this.container.push(new Triangle(b, h));
}
// Implement `addSquare` and `addCircle`
sumArea() {
// Iterate over `this.container` here, to add together all shapes'
// areas in the container. Look into using `reduce` for that.
}
}
const answer = new Answer();
answer.addTriangle(3, 5);
answer.addTriangle(4, 1);
// answer.addSquare(2, 4);
// answer.addCircle(6);
console.log(answer.sumArea());