Menu
Coddy logo textTech

Zusammenfassung – Shape-Enum

Teil des Abschnitts Objektorientierte Programmierung der Rust-Journey von Coddy. Lektion 18 von 61.

challenge icon

Aufgabe

Einfach

Erstelle einen Geometrie-Rechner, der ein Enum verwendet, um verschiedene Formen darzustellen, wobei jede ihre eigenen Abmessungen speichert. Dein Shape-Enum zeigt, wie ein einzelner Typ verschiedene Datenstrukturen enthalten und durch Methoden einheitliches Verhalten bereitstellen kann.

Du erstellst zwei Dateien, um deinen Code zu organisieren:

  • shape.rs: Definiere ein öffentliches Shape-Enum mit zwei Varianten:
    • Circle: enthält einen einzelnen f64-Wert, der den Radius darstellt (Tupel-Syntax)
    • Rectangle: enthält benannte Felder: width (f64) und height (f64)
    Implementiere eine area-Methode, die Pattern Matching verwendet, um die korrekte Fläche basierend auf der Variante zu berechnen. Verwende für Kreise 3.14159 als π.
  • main.rs: Binde dein Shape-Modul ein, erstelle mithilfe der bereitgestellten Eingaben eine Instanz jeder Formvariante und gib die Fläche jeder Form aus.

Deine area-Methode sollte einen f64-Wert zurückgeben. Beim Matching soll jede Variante destrukturiert werden, um ihre Abmessungen zu extrahieren und die entsprechende Formel anzuwenden:

  • Kreisfläche: π × radius²
  • Rechteckfläche: width × height

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

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

Wenn beispielsweise der Radius eines Kreises 5.0 und die Breite und Höhe eines Rechtecks 4.0 beziehungsweise 6.0 betragen, würde die Ausgabe folgendermaßen aussehen:

Circle area: 78.5
Rectangle area: 24.0

Du erhältst 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 mit dem radius
    
    // TODO: Erstelle eine Rectangle-Form mit width und height
    
    // TODO: Gib die Fläche jeder Form mit einer Dezimalstelle aus
    // Format: "Circle area: {area}" and "Rectangle area: {area}"
}

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-Rust-Compiler