Menu
Coddy logo textTech

Bedingtes Hinzufügen: putIfAbsent

Teil des Abschnitts Logik & Ablauf der Dart-Journey von Coddy. Lektion 29 von 65.

Manchmal müssen Sie ein Schlüssel-Wert-Paar zu einer Map hinzufügen, aber nur, wenn dieser Schlüssel noch nicht existiert. Die Methode putIfAbsent() bewältigt diese Situation perfekt, indem sie den Eintrag nur dann hinzufügt, wenn der Schlüssel in der Map fehlt.

Diese Methode nimmt zwei Parameter entgegen: den Schlüssel, nach dem gesucht werden soll, und den Wert, der hinzugefügt werden soll, falls der Schlüssel nicht vorhanden ist. Wenn der Schlüssel bereits existiert, macht putIfAbsent() nichts und lässt den vorhandenen Wert unverändert. Wenn der Schlüssel fehlt, fügt sie das neue Schlüssel-Wert-Paar zur Map hinzu.

Map<String, int> gameScores = {
  'Alice': 150,
  'Bob': 200
};

// Dies fügt Charlie hinzu, da er noch nicht in der Map enthalten ist
gameScores.putIfAbsent('Charlie', () => 0);
print(gameScores);  // {Alice: 150, Bob: 200, Charlie: 0}

// Dies wird Alices Punktzahl nicht ändern, da sie bereits existiert
gameScores.putIfAbsent('Alice', () => 0);
print(gameScores);  // {Alice: 150, Bob: 200, Charlie: 0}

Die Methode putIfAbsent() ist besonders nützlich für die Initialisierung von Standardwerten, wie zum Beispiel beim Einrichten neuer Benutzerkonten oder um sicherzustellen, dass bestimmte Schlüssel existieren, bevor Operationen an ihnen durchgeführt werden. Es ist ein sicherer Weg, Daten hinzuzufügen, ohne versehentlich vorhandene Informationen zu überschreiben.

challenge icon

Aufgabe

Einfach

Erstelle ein Programm, das ein Anmeldesystem für ein Gaming-Turnier verwaltet, indem es die Punktzahlen der Spieler verfolgt und sicherstellt, dass alle Spieler Standardanfangswerte haben. Dein Programm sollte:

  1. Eine String-Eingabe lesen, die den Namen des Turniers darstellt
  2. Mehrere Eingabepaare lesen, die aus Spielernamen und ihren aktuellen Punktzahlen bestehen (die Eingabe endet, sobald du "scores_done" erhältst)
  3. Mehrere String-Eingaben lesen, die neue Spieler darstellen, die dem Turnier beitreten möchten (die Eingabe endet, sobald du "players_done" erhältst)
  4. Eine Map erstellen, um Spielernamen als Schlüssel und ihre Punktzahlen als Werte zu speichern
  5. Die Methode putIfAbsent() verwenden, um jeden neuen Spieler mit einer Standardpunktzahl von 0 hinzuzufügen, aber nur, wenn er noch nicht registriert ist
  6. Die Turnierstatistiken berechnen und den Anmeldebericht exakt im unten gezeigten Format ausgeben

Wenn der Turniername beispielsweise "Spring Championship" lautet, die vorhandenen Punktzahlen "Alice" mit 150, "Bob" mit 200, "Charlie" mit 75 umfassen und die neuen Spieler "Diana", "Alice", "Eve" sind, sollte dein Programm Folgendes ausgeben:

Tournament: Spring Championship
Initial Scores: {Alice: 150, Bob: 200, Charlie: 75}
Registration Process:
Adding Diana: New player registered with score 0
Adding Alice: Player already exists, keeping score 150
Adding Eve: New player registered with score 0
Final Scores: {Alice: 150, Bob: 200, Charlie: 75, Diana: 0, Eve: 0}
Tournament Statistics:
Total registered players: 5
Players with scores above 0: 3
New players added: 2
Average score: 85.0
Status: Registration completed successfully

Wenn der Turniername "Winter Cup" lautet, die vorhandenen Punktzahlen "John" mit 300 und "Mary" mit 250 umfassen und die neuen Spieler "Sarah", "Tom", "John" sind, sollte dein Programm Folgendes ausgeben:

Tournament: Winter Cup
Initial Scores: {John: 300, Mary: 250}
Registration Process:
Adding Sarah: New player registered with score 0
Adding Tom: New player registered with score 0
Adding John: Player already exists, keeping score 300
Final Scores: {John: 300, Mary: 250, Sarah: 0, Tom: 0}
Tournament Statistics:
Total registered players: 4
Players with scores above 0: 2
New players added: 2
Average score: 137.5
Status: Registration completed successfully

Wenn der Turniername "Summer League" lautet, die vorhandenen Punktzahlen "Alex" mit 180, "Jordan" mit 220, "Taylor" mit 160, "Morgan" mit 190 umfassen und die neuen Spieler "Casey", "Riley" sind, sollte dein Programm Folgendes ausgeben:

Tournament: Summer League
Initial Scores: {Alex: 180, Jordan: 220, Taylor: 160, Morgan: 190}
Registration Process:
Adding Casey: New player registered with score 0
Adding Riley: New player registered with score 0
Final Scores: {Alex: 180, Jordan: 220, Taylor: 160, Morgan: 190, Casey: 0, Riley: 0}
Tournament Statistics:
Total registered players: 6
Players with scores above 0: 4
New players added: 2
Average score: 158.33333333333334
Status: Registration completed successfully

Dein Programm muss die Methode putIfAbsent() verwenden, um neue Spieler mit einer Standardpunktzahl von 0 hinzuzufügen und dabei sicherzustellen, dass bestehende Spieler ihre aktuellen Punktzahlen unverändert behalten. Berechne die durchschnittliche Punktzahl, indem du die Summe aller Punktzahlen durch die Anzahl der Spieler teilst. Zähle, wie viele Spieler Punktzahlen über 0 haben und wie viele neue Spieler tatsächlich hinzugefügt wurden (ausgenommen diejenigen, die bereits registriert waren). Das Eingabeformat lautet: Turniername, danach abwechselnd Spielernamen und Punktzahlen (als Strings, die in Ganzzahlen umgewandelt werden müssen), endend mit "scores_done", gefolgt von neuen Spielernamen, endend mit "players_done".

Probier es selbst

import 'dart:io';

void main() {
  // Turniernamen lesen
  String? tournamentName = stdin.readLineSync();
  
  // Eine Map erstellen, um Spieler-Scores zu speichern
  Map<String, int> playerScores = {};
  
  // Bestehende Spieler-Scores lesen
  while (true) {
    String? input = stdin.readLineSync();
    if (input == "scores_done") break;
    
    String playerName = input!;
    String? scoreInput = stdin.readLineSync();
    int score = int.parse(scoreInput!);
    playerScores[playerName] = score;
  }
  
  // Ursprüngliche Scores für die Anzeige speichern
  Map<String, int> initialScores = Map.from(playerScores);
  
  // Neue zu registrierende Spieler lesen
  List<String> newPlayers = [];
  while (true) {
    String? input = stdin.readLineSync();
    if (input == "players_done") break;
    newPlayers.add(input!);
  }
  
  // TODO: Schreiben Sie Ihren Code unten
  // Verwenden Sie die Methode putIfAbsent(), um neue Spieler mit dem Standard-Score 0 hinzuzufügen
  // Verfolgen Sie den Registrierungsprozess und berechnen Sie Statistiken
  
  // Den Turnier-Registrierungsbericht ausgeben
  print("Tournament: $tournamentName");
  print("Initial Scores: $initialScores");
  print("Registration Process:");
  // Registrierungsprozess-Details hier ausgeben
  print("Final Scores: $playerScores");
  print("Tournament Statistics:");
  // Statistiken hier ausgeben
  print("Status: Registration completed successfully");
}
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 Logik & Ablauf

Übe selbstständig: Online-Dart-Compiler