Wikipedia beschreibt eine switch-Anweisung als „eine Art Auswahlkontrollmechanismus, mit dem der Wert einer Variable oder eines Ausdrucks den Kontrollfluss des Programms ändern kann“.
Der Mechanismus beruht auf den folgenden Schlüsselwörtern: switch, case, break und default.
In ihrer einfachsten Form prüfen sie einen primitiven Ausdruck oder einen String und treffen anhand seines Werts eine Entscheidung. Zum Beispiel:
string direction = GetDirection();
switch (direction)
{
case "left":
GoLeft();
break;
case "right":
GoRight();
break;
default:
MarkTime();
break;
}
In ihrer ausgefeiltesten Form führen sie Downcasting mit case <Type> <variable>: und Guards (when) ein.
Animal animal = GetAnimal();
switch (animal)
{
case Dog canine:
case Coyote canine:
canine.Bark();
break;
case Cat cat when cat.HasOnly8Lives():
cat.IsCareful();
cat.Meow();
break;
case Cat cat:
cat.Meow();
break;
}
Du entwickelst ein System, das die Mitarbeiter der Website eines Fußballvereins dabei unterstützt, über Spiele zu berichten. Dieses System kann verschiedene Aspekte des Spiels analysieren, sowohl auf als auch neben dem Spielfeld, und wandelt sie in einen Strom von Ereignissen um.
Die Mannschaft spielt immer nur im 4-3-3-System und hat der Regeländerung von 1965, die Auswechslungen erlaubt, nie zugestimmt, geschweige denn größeren Kadern.
Die Spielerbeschreibungen sind wie folgt:
1 -> "goalie"
2 -> "left back"
3 & 4 -> "center back"
5 -> "right back"
6, 7 & 8 -> "midfielder"
9 -> "left wing"
10 -> "striker"
11 -> "right wing"
Implementiere die statische Methode PlayAnalyzer.AnalyzeOnField(), die anhand der Trikotnummer eine Spielerbeschreibung ausgibt.
PlayAnalyzer.AnalyzeOnField(10);
// => "striker"
Passe die Methode PlayAnalyzer.AnalyzeOnField() so an, dass sie UNKNOWN meldet, wenn eine Trikotnummer außerhalb des Bereichs 1-11 verarbeitet wird.
Implementiere die Methode PlayAnalyzer.AnalyzeOffField(), die Beschreibungen von Aktivitäten und Personen rund um das Spielfeld ausgibt.
Diese Methode erhält verschiedene Arten von Daten, die analysiert und in passenden Text umgewandelt werden sollen, um den Journalisten zu helfen.
Zunächst behandeln wir Daten über das Stadion:
int)string)Unbekannte Datentypen sollen nicht verarbeitet werden. Erhält die Methode also Daten eines anderen Typs, soll ein leerer String zurückgegeben werden.
PlayAnalyzer.AnalyzeOffField(5000);
// => "There are 5000 supporters at the match."
PlayAnalyzer.AnalyzeOffField("5 minutes to go!");
// => "5 minutes to go!"
PlayAnalyzer.AnalyzeOffField(0.5);
// => ""
Passe die Methode PlayAnalyzer.AnalyzeOffField() so an, dass sie Beschreibungen von Vorfällen ausgibt, die während des Spiels passieren.
Vorfälle können jede Unterklasse des Typs Incident sein und enthalten eine Beschreibung des Vorfalls.
Verletzungen sind eine besondere Art von Vorfall, weil sie das Spiel unterbrechen. Deshalb sollten sie anders behandelt werden.
PlayAnalyzer.AnalyzeOffField(new Foul());
// => "The referee deemed a foul."
PlayAnalyzer.AnalyzeOffField(new Injury(8));
// => "Oh no! Player 8 is injured. Medics are on the field."
Passe die Methode PlayAnalyzer.AnalyzeOffField() so an, dass sie die beim Spiel anwesenden Vereinstrainer erwähnt.
Trainer sind Instanzen des Typs Manager und haben einen Namen und den Namen des Vereins, den sie trainieren.
Der Verein eines Trainers kann unbekannt sein; in diesem Fall wird er auf null gesetzt.
Ist der Verein eines Trainers nicht bekannt, soll er nicht Teil der Beschreibung sein.
PlayAnalyzer.AnalyzeOffField(new Manager("José Mário dos Santos Mourinho Félix", null));
// => "José Mário dos Santos Mourinho Félix"
PlayAnalyzer.AnalyzeOffField(new Manager("Jürgen Klopp", "Liverpool"));
// => "Jürgen Klopp (Liverpool)"
Melde dich bei Exercism an, um C# mit 62 Konzepte178 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.