Menu
Coddy logo textTech

Powtórka — kalkulator figur

Część sekcji Programowanie obiektowe ścieżki Java w Coddy. Lekcja 33 z 87.

challenge icon

Wyzwanie

Łatwy

Zbudujesz kalkulator figur, który łączy wszystkie koncepcje polimorfizmu poznane w tym rozdziale. Utworzysz abstrakcyjną klasę Shape z konkretnymi podklasami, a następnie użyjesz polimorfizmu, aby obliczać i wyświetlać pola powierzchni w jednolity sposób.

Rozmieścisz kod w czterech plikach:

  • Shape.java: Utwórz klasę abstrakcyjną, która będzie podstawą dla wszystkich figur. Każda figura ma pole name (String). Dodaj konstruktor, który je zainicjuje, metodę pobierającą getName() oraz metodę abstrakcyjną getArea(), która zwraca wartość typu double. Dodaj też metodę describe(), która zwraca: [name]: [area] (gdzie pole powierzchni jest sformatowane do 2 miejsc po przecinku za pomocą String.format("%.2f", getArea())).
  • Circle.java: Utwórz konkretną klasę rozszerzającą Shape. Koła mają pole radius (double). Użyj super, aby przekazać "Circle" jako nazwę. Zaimplementuj getArea(), aby zwracała pole powierzchni obliczone za pomocą Math.PI * radius * radius.
  • Rectangle.java: Utwórz kolejną konkretną klasę rozszerzającą Shape. Prostokąty mają pola width i height (oba typu double). Przekaż "Rectangle" jako nazwę do konstruktora klasy nadrzędnej. Zaimplementuj getArea(), aby zwracała iloczyn width i height.
  • Main.java: Zbuduj kalkulator figur, który pokaże polimorfizm w działaniu. Otrzymasz trzy dane wejściowe: promień koła, szerokość i wysokość prostokąta.

    Utwórz koło i prostokąt, a następnie zapisz je w tablicy referencji typu Shape. Przejdź pętlą przez tablicę i dla każdej figury wypisz jej opis za pomocą metody describe().

    Po zakończeniu pętli oblicz i wypisz łączne pole powierzchni wszystkich figur w formacie: Total area: [sum] (również sformatowane do 2 miejsc po przecinku). Użyj osobnej pętli lub akumulatora, aby zsumować pola powierzchni, wywołując getArea() dla każdej referencji do figury.

Otrzymasz trzy dane wejściowe: promień koła (double), szerokość prostokąta (double) i wysokość prostokąta (double).

Wynik powinien zawierać trzy wiersze — opis każdej figury, a po nim łączne pole powierzchni. Zwróć uwagę, że możesz traktować różne figury w jednolity sposób za pomocą abstrakcyjnego typu Shape, podczas gdy każda figura oblicza swoje pole powierzchni na swój własny sposób!

Spróbuj swoich sił

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Wczytaj dane wejściowe
        double radius = scanner.nextDouble();
        double width = scanner.nextDouble();
        double height = scanner.nextDouble();
        
        // TODO: Utwórz obiekt Circle, używając radius
        
        // TODO: Utwórz obiekt Rectangle, używając width i height
        
        // TODO: Utwórz tablicę referencji do Shape i umieść w niej oba obiekty
        
        // TODO: Przejdź przez tablicę i wypisz opis każdego obiektu, używając describe()
        
        // TODO: Oblicz łączne pole wszystkich figur
        // Użyj pętli lub akumulatora, aby zsumować pola, wywołując getArea() dla każdej figury
        
        // TODO: Wypisz łączne pole w formacie: "Total area: [sum]"
        // Użyj String.format("%.2f", totalArea) do formatowania
    }
}

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator Java online