Menu
Coddy logo textTech

Zusammenfassung – Shape-Enum

Teil des Abschnitts Object Oriented Programming der Rust-Journey von Coddy — Lektion 18 von 61.

challenge icon

Aufgabe

Einfach

Lassen Sie uns einen Geometrierechner erstellen, der ein Enum verwendet, um verschiedene Formen darzustellen, von denen jede ihre eigenen Dimensionen speichert. Ihr Shape-Enum wird demonstrieren, wie ein einzelner Typ verschiedene Datenstrukturen enthalten und durch Methoden ein einheitliches Verhalten bieten kann.

Sie werden zwei Dateien erstellen, um Ihren Code zu organisieren:

  • shape.rs: Definieren Sie ein öffentliches Shape-Enum mit zwei Varianten:
    • Circle — enthält ein einzelnes f64, das den Radius darstellt (Tupel-Syntax)
    • Rectangle — enthält benannte Felder: width (f64) und height (f64)
    Implementieren Sie eine area-Methode, die Pattern Matching verwendet, um die korrekte Fläche basierend auf der Variante zu berechnen. Verwenden Sie für Kreise 3.14159 als π.
  • main.rs: Binden Sie Ihr shape-Modul ein, erstellen Sie eine Instanz jeder Formvariante unter Verwendung der bereitgestellten Eingaben und geben Sie die Fläche jeder Form aus.

Ihre area-Methode sollte ein f64 zurückgeben. Destrukturieren Sie beim Matching jede Variante, um ihre Dimensionen zu extrahieren, und wenden Sie die entsprechende Formel an:

  • Circle area: π × radius²
  • Rectangle area: width × height

Ihre Ausgabe sollte die Fläche jeder Form in einer eigenen Zeile mit genau einer Dezimalstelle anzeigen:

Circle area: {area}
Rectangle area: {area}

Zum Beispiel würde bei einem Kreisradius von 5.0 und einem Rechteck mit der Breite 4.0 und der Höhe 6.0 die Ausgabe wie folgt aussehen:

Circle area: 78.5
Rectangle area: 24.0

Sie erhalten drei Eingaben: den Radius des Kreises, die Breite des Rechtecks und die Höhe des Rechtecks.

Probier es selbst

mod shape;

use shape::Shape;

fn main() {
    // Eingaben lesen
    let mut radius_input = String::new();
    std::io::stdin().read_line(&mut radius_input).expect("Failed to read line");
    let radius: f64 = radius_input.trim().parse().expect("Invalid number");

    let mut width_input = String::new();
    std::io::stdin().read_line(&mut width_input).expect("Failed to read line");
    let width: f64 = width_input.trim().parse().expect("Invalid number");

    let mut height_input = String::new();
    std::io::stdin().read_line(&mut height_input).expect("Failed to read line");
    let height: f64 = height_input.trim().parse().expect("Invalid number");

    // TODO: Erstelle eine Circle-Form unter Verwendung von radius
    
    // TODO: Erstelle eine Rectangle-Form unter Verwendung von width und height
    
    // TODO: Gib die Fläche jeder Form mit einer Dezimalstelle aus
    // Format: "Circle area: {area}" und "Rectangle area: {area}"
}

Alle Lektionen in Object Oriented Programming