Menu
Coddy logo textTech

Итоги: Калькулятор фигур

Часть раздела Объектно-ориентированное программирование путешествия по Java на Coddy — урок 33 из 87.

challenge icon

Задание

Легко

Давайте создадим калькулятор фигур, который объединит все концепции полиморфизма, изученные вами в этой главе. Вы создадите абстрактный класс Shape с конкретными подклассами, а затем используете полиморфизм для единообразного вычисления и отображения площадей.

Вы организуете свой код в четырех файлах:

  • Shape.java: Создайте абстрактный класс, который послужит основой для всех фигур. У каждой фигуры есть поле name (String). Включите конструктор для его инициализации, геттер getName() и абстрактный метод getArea(), который возвращает double. Также добавьте метод describe(), который возвращает: [name]: [area] (где площадь отформатирована до 2 знаков после запятой с помощью String.format("%.2f", getArea())).
  • Circle.java: Создайте конкретный класс, расширяющий Shape. У кругов есть поле radius (double). Используйте super, чтобы передать "Circle" в качестве имени. Реализуйте getArea() для возврата площади, используя Math.PI * radius * radius.
  • Rectangle.java: Создайте еще один конкретный класс, расширяющий Shape. У прямоугольников есть поля width и height (оба double). Передайте "Rectangle" в качестве имени в конструктор родителя. Реализуйте getArea() для возврата произведения ширины на высоту.
  • Main.java: Создайте калькулятор фигур, демонстрирующий полиморфизм в действии. Вы получите три входных значения: радиус для круга, ширину и высоту для прямоугольника.

    Создайте Circle и Rectangle, затем сохраните их в массиве ссылок Shape. Пройдите циклом по массиву и для каждой фигуры выведите ее описание, используя метод describe().

    После цикла вычислите и выведите общую площадь всех фигур в формате: Total area: [sum] (также отформатированную до 2 знаков после запятой). Используйте отдельный цикл или аккумулятор для суммирования площадей, вызывая getArea() для каждой ссылки на фигуру.

Вы получите три входных значения: радиус круга (double), ширину прямоугольника (double) и высоту прямоугольника (double).

Ваш вывод должен содержать три строки — по одному описанию для каждой фигуры, за которым следует общая площадь. Обратите внимание, как вы можете единообразно работать с различными фигурами через абстрактный тип Shape, в то время как каждая фигура вычисляет свою площадь по-своему!

Попробуйте сами

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Чтение входных данных
        double radius = scanner.nextDouble();
        double width = scanner.nextDouble();
        double height = scanner.nextDouble();
        
        // TODO: Создайте объект Circle, используя radius
        
        // TODO: Создайте объект Rectangle, используя width и height
        
        // TODO: Создайте массив ссылок Shape и сохраните в нем обе фигуры
        
        // TODO: Пройдитесь циклом по массиву и выведите описание каждой фигуры с помощью describe()
        
        // TODO: Вычислите общую площадь всех фигур
        // Используйте цикл или аккумулятор для суммирования площадей, вызывая getArea() для каждой фигуры
        
        // TODO: Выведите общую площадь в формате: "Total area: [sum]"
        // Используйте String.format("%.2f", totalArea) для форматирования
    }
}

Все уроки раздела Объектно-ориентированное программирование