Menu
Coddy logo textTech

Veränderbare Structs

Teil des Abschnitts Logic & Flow der Rust-Journey von Coddy — Lektion 23 von 66.

Standardmäßig sind Struct-Instanzen in Rust unveränderlich – sobald man sie erstellt hat, kann man ihre Feldwerte nicht mehr ändern. Wie bei anderen Variablen auch, kann man eine Struct-Instanz jedoch veränderlich machen, indem man bei der Deklaration das Schlüsselwort mut hinzufügt.

Wenn Sie eine Struct-Instanz als veränderbar (mutable) deklarieren, können Sie jedes ihrer Felder mithilfe der Punktnotation ändern:

let mut player = Player {
    name: String::from("Alice"),
    score: 0,
};

player.score = 100; // Dies funktioniert, weil player veränderbar ist

Ohne das Schlüsselwort mut würde der Versuch, ein Feld zu ändern, zu einem Kompilierungsfehler führen. Die Veränderbarkeit bezieht sich auf die gesamte Struct-Instanz – man kann nicht einzelne Felder veränderbar machen, während andere unveränderbar bleiben.

challenge icon

Aufgabe

Einfach

Sie erhalten vier Eingaben: einen Spielernamen, eine Anfangspunktzahl (als Ganzzahl), eine hinzuzufügende Bonuszahl (als Ganzzahl) und eine abschließende Punktanpassung (als Ganzzahl). Definieren Sie eine Player-Struktur mit zwei Feldern: name vom Typ String und score vom Typ i32. Erstellen Sie eine veränderbare Instanz dieser Struktur und ändern Sie dann das score-Feld mehrmals unter Verwendung der Eingabewerte.

Anforderungen:

  • Definieren Sie eine Player-Struktur mit den Feldern: name: String und score: i32
  • Lesen Sie die erste Eingabe als Spielernamen ein
  • Lesen Sie die zweite Eingabe ein und konvertieren Sie diese in i32 für die Anfangspunktzahl
  • Erstellen Sie eine veränderbare Instanz der Player-Struktur mit diesen Werten
  • Lesen Sie die dritte Eingabe ein und konvertieren Sie diese in i32 für die Bonuszahl
  • Addieren Sie die Bonuszahl zur aktuellen Punktzahl des Spielers unter Verwendung der Punktnotation
  • Lesen Sie die vierte Eingabe ein und konvertieren Sie diese in i32 für die abschließende Anpassung
  • Addieren Sie die abschließende Anpassung zur aktuellen Punktzahl des Spielers
  • Geben Sie die Spielerinformationen in dem unten gezeigten exakten Format aus

Eingabe:

  • Erste Zeile: Spielername (z. B. Alice)
  • Zweite Zeile: Anfangspunktzahl als Ganzzahl (z. B. 50)
  • Dritte Zeile: Bonuszahl als Ganzzahl (z. B. 30)
  • Vierte Zeile: Abschließende Anpassung als Ganzzahl (z. B. 20)

Ausgabe:

  • Erste Zeile: Player: [name]
  • Zweite Zeile: Final Score: [score]

Spickzettel

Struct-Instanzen in Rust sind standardmäßig unveränderlich. Um Feldwerte nach der Erstellung zu ändern, deklarieren Sie die Instanz mit dem Schlüsselwort mut als veränderlich:

let mut player = Player {
    name: String::from("Alice"),
    score: 0,
};

player.score = 100; // Feld mit Punktnotation ändern

Die Veränderlichkeit bezieht sich auf die gesamte Struct-Instanz – es ist nicht möglich, einzelne Felder als veränderlich zu deklarieren, während andere unveränderlich bleiben.

Probier es selbst

use std::io;

// TODO: Definieren Sie hier das Player-Struct mit den Feldern name und score

fn main() {
    // Spielername lesen
    let mut name = String::new();
    io::stdin().read_line(&mut name).expect("Failed to read line");
    let name = name.trim().to_string();
    
    // Anfangspunktzahl lesen
    let mut initial_score = String::new();
    io::stdin().read_line(&mut initial_score).expect("Failed to read line");
    let initial_score: i32 = initial_score.trim().parse().expect("Invalid number");
    
    // Bonuspunkte lesen
    let mut bonus = String::new();
    io::stdin().read_line(&mut bonus).expect("Failed to read line");
    let bonus: i32 = bonus.trim().parse().expect("Invalid number");
    
    // Finale Anpassung lesen
    let mut adjustment = String::new();
    io::stdin().read_line(&mut adjustment).expect("Failed to read line");
    let adjustment: i32 = adjustment.trim().parse().expect("Invalid number");
    
    // TODO: Erstellen Sie eine veränderbare Player-Instanz
    
    // TODO: Addieren Sie die Bonuspunkte zur Punktzahl des Spielers
    
    // TODO: Addieren Sie die finale Anpassung zur Punktzahl des Spielers
    
    // TODO: Geben Sie die Ausgabe im erforderlichen Format aus
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logic & Flow