Übung: Erstellen wiederverwendbarer Methoden
- 10 Minuten
Wenn Sie Anwendungen entwickeln, stellen Sie möglicherweise fest, dass Sie immer wieder denselben Code schreiben. Anstatt duplizierten Code zu schreiben, verkürzt die Verwendung einer Methode zur Ausführung derselben Aufgabe Ihren Code und hilft Ihnen, Anwendungen schneller zu entwickeln. In dieser Übung identifizieren Sie wiederholten Code und ersetzen ihn durch eine wiederverwendbare Methode. Fangen wir an!
Identifizieren von duplizierten Code
In dieser Aufgabe sehen Sie sich eine Anwendung an, die Die Medikamentenzeiten in verschiedenen Zeitzonen nachverfolgt. Der Benutzer gibt seine aktuelle Zeitzone und die Zielzeitzone ein. Ihr Medikamentenplan wird angezeigt und dann für die neue Zeitzone angepasst.
Löschen Sie im Visual Studio Code-Editor vorhandenen Code aus den vorherigen Übungen.
Kopieren Sie den folgenden Code, und fügen Sie ihn in den Visual Studio Code-Editor ein:
using System; int[] times = {800, 1200, 1600, 2000}; int diff = 0; Console.WriteLine("Enter current GMT"); int currentGMT = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Current Medicine Schedule:"); /* Format and display medicine times */ foreach (int val in times) { string time = val.ToString(); int len = time.Length; if (len >= 3) { time = time.Insert(len - 2, ":"); } else if (len == 2) { time = time.Insert(0, "0:"); } else { time = time.Insert(0, "0:0"); } Console.Write($"{time} "); } Console.WriteLine(); Console.WriteLine("Enter new GMT"); int newGMT = Convert.ToInt32(Console.ReadLine()); if (Math.Abs(newGMT) > 12 || Math.Abs(currentGMT) > 12) { Console.WriteLine("Invalid GMT"); } else if (newGMT <= 0 && currentGMT <= 0 || newGMT >= 0 && currentGMT >= 0) { diff = 100 * (Math.Abs(newGMT) - Math.Abs(currentGMT)); /* Adjust the times by adding the difference, keeping the value within 24 hours */ for (int i = 0; i < times.Length; i++) { times[i] = ((times[i] + diff)) % 2400; } } else { diff = 100 * (Math.Abs(newGMT) + Math.Abs(currentGMT)); /* Adjust the times by adding the difference, keeping the value within 24 hours */ for (int i = 0; i < times.Length; i++) { times[i] = ((times[i] + diff)) % 2400; } } Console.WriteLine("New Medicine Schedule:"); /* Format and display medicine times */ foreach (int val in times) { string time = val.ToString(); int len = time.Length; if (len >= 3) { time = time.Insert(len - 2, ":"); } else if (len == 2) { time = time.Insert(0, "0:"); } else { time = time.Insert(0, "0:0"); } Console.Write($"{time} "); } Console.WriteLine();Beachten Sie, dass mehrere
for-Schleifen vorhanden sind, die mit identischen Code wiederholt werden.Es gibt zwei
foreachSchleifen, die die Medikamentenzeiten formatieren und anzeigen. Es gibt weitere zweiforSchleifen, die die Zeiten entsprechend der Zeitzonendifferenz anpassen.Während Sie Code schreiben, stoßen Sie möglicherweise auf sich wiederholende Codeblöcke, um dieselbe Aufgabe zu erledigen. Dies ist eine perfekte Gelegenheit, Ihren Code mithilfe einer Methode zu konsolidieren, um stattdessen die Aufgabe auszuführen. Probieren Sie es aus!
Erstellen von Methoden zum Ausführen der wiederholten Aufgaben
Nachdem Sie wiederholten Code identifiziert haben, können Sie eine Methode erstellen, um den Code zu enthalten und die Duplikate zu entfernen. Die Verwendung von Methoden hat den zusätzlichen Bonus, Ihren Code zu kürzen und die Lesbarkeit zu verbessern! Die foreach Schleifen formatieren und zeigen die Zeitwerte an, sodass Sie der Methode einen Namen geben können, der diese Aufgabe deutlich widerspiegelt. Sie können dasselbe mit der for Schleife tun, die die Zeiten anpasst. Fangen wir an!
Geben Sie am Ende des vorherigen Codes eine neue leere Codezeile ein.
Erstellen Sie in der neuen leeren Codezeile eine Methodensignatur, indem Sie den folgenden Code eingeben:
void DisplayTimes() { }Um den Methodentext zu definieren, aktualisieren Sie die
DisplayTimesMethode durch Kopieren und Einfügen desforeachBlocks wie folgt:void DisplayTimes() { /* Format and display medicine times */ foreach (int val in times) { string time = val.ToString(); int len = time.Length; if (len >= 3) { time = time.Insert(len - 2, ":"); } else if (len == 2) { time = time.Insert(0, "0:"); } else { time = time.Insert(0, "0:0"); } Console.Write($"{time} "); } Console.WriteLine(); }In dieser Methode fügen Sie den Aufruf
Console.WriteLineam Ende ein, um eine neue Zeile anzufügen, nachdem die Uhrzeiten angezeigt wurden. Als Nächstes erstellen Sie eine weitere Methode, um die Zeiten entsprechend der Zeitzonendifferenz anzupassen.Geben Sie am Ende des vorherigen Codes eine neue leere Codezeile ein.
Erstellen Sie in der neuen leeren Codezeile eine Methodensignatur, indem Sie den folgenden Code eingeben:
void AdjustTimes() { }Aktualisieren Sie die
AdjustTimesMethode durch Kopieren und Einfügen derforSchleife wie folgt:void AdjustTimes() { /* Adjust the times by adding the difference, keeping the value within 24 hours */ for (int i = 0; i < times.Length; i++) { times[i] = ((times[i] + diff)) % 2400; } }
Schritt 3: Aufrufen der Methoden
In dieser Aufgabe löschen Sie die wiederholten Codeblöcke und ersetzen sie durch Aufrufe der von Ihnen erstellten Methoden.
Suchen Sie die erste Instanz der wiederholten
foreach-Schleife unter dem Kommentar „Format and display medicine times“:Console.WriteLine("Current Medicine Schedule:"); /* Format and display medicine times */ foreach (int val in times) { ... } Console.WriteLine(); Console.WriteLine("Enter new GMT");Ersetzen Sie den code, den Sie durch einen Aufruf der
DisplayTimesMethode identifiziert haben. Die Ersetzung sollte zum folgenden Code führen:Console.WriteLine("Current Medicine Schedule:"); DisplayTimes(); Console.WriteLine("Enter new GMT");Als Nächstes ersetzen Sie die zweite Instanz des wiederholten Codes.
Suchen Sie die zweite Instanz der
foreach-Schleife unter dem Kommentar „Format and display medicine times“:Console.WriteLine("New Medicine Schedule:"); /* Format and display medicine times */ foreach (int val in times) { ... } Console.WriteLine();Ersetzen Sie den code, den Sie durch einen Aufruf der
DisplayTimesMethode identifiziert haben. Die Ersetzung sollte zum folgenden Code führen:Console.WriteLine("New Medicine Schedule:"); DisplayTimes();Beachten Sie, dass die Verwendung einer Methode anstelle eines großen Codeblocks mehr Klarheit bietet und den Code leichter verständlich macht. Lassen Sie uns dies mit der
AdjustTimesvon Ihnen erstellten Methode tun.Suchen Sie den folgenden Code mit den duplizierten
for-Schleifen:else if (newGMT <= 0 && currentGMT <= 0 || newGMT >= 0 && currentGMT >= 0) { diff = 100 * (Math.Abs(newGMT) - Math.Abs(currentGMT)); /* Adjust the times by adding the difference, keeping the value within 24 hours */ for (int i = 0; i < times.Length; i++) { times[i] = ((times[i] + diff)) % 2400; } } else { diff = 100 * (Math.Abs(newGMT) + Math.Abs(currentGMT)); /* Adjust the times by adding the difference, keeping the value within 24 hours */ for (int i = 0; i < times.Length; i++) { times[i] = ((times[i] + diff)) % 2400; } }Ersetzen Sie die Instanzen wiederholten Codes unter dem Kommentar „Adjust the times by adding the difference“ durch Aufrufe der
AdjustTimes-Methode. Die Ersetzung sollte zum folgenden Code führen:else if (newGMT <= 0 && currentGMT <= 0 || newGMT >= 0 && currentGMT >= 0) { diff = 100 * (Math.Abs(newGMT) - Math.Abs(currentGMT)); AdjustTimes(); } else { diff = 100 * (Math.Abs(newGMT) + Math.Abs(currentGMT)); AdjustTimes(); }Jetzt wurde der gesamte duplizierte Code durch Ihre neue Methode ersetzt. Beachten Sie, wie viel besser lesbar und präziser Ihr Code aussieht!
Überprüfen Ihrer Arbeit
In dieser Aufgabe führen Sie Ihre Anwendung über das integrierte Terminal aus und überprüfen, ob Ihr Code ordnungsgemäß funktioniert. Fangen wir an.
Vergleichen Sie Ihren Code mit dem folgenden Code, um sicherzustellen, dass er richtig ist:
int[] times = {800, 1200, 1600, 2000}; int diff = 0; Console.WriteLine("Enter current GMT"); int currentGMT = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Current Medicine Schedule:"); DisplayTimes(); Console.WriteLine("Enter new GMT"); int newGMT = Convert.ToInt32(Console.ReadLine()); if (Math.Abs(newGMT) > 12 || Math.Abs(currentGMT) > 12) { Console.WriteLine("Invalid GMT"); } else if (newGMT <= 0 && currentGMT <= 0 || newGMT >= 0 && currentGMT >= 0) { diff = 100 * (Math.Abs(newGMT) - Math.Abs(currentGMT)); AdjustTimes(); } else { diff = 100 * (Math.Abs(newGMT) + Math.Abs(currentGMT)); AdjustTimes(); } Console.WriteLine("New Medicine Schedule:"); DisplayTimes(); void DisplayTimes() { /* Format and display medicine times */ foreach (int val in times) { string time = val.ToString(); int len = time.Length; if (len >= 3) { time = time.Insert(len - 2, ":"); } else if (len == 2) { time = time.Insert(0, "0:"); } else { time = time.Insert(0, "0:0"); } Console.Write($"{time} "); } Console.WriteLine(); } void AdjustTimes() { /* Adjust the times by adding the difference, keeping the value within 24 hours */ for (int i = 0; i < times.Length; i++) { times[i] = ((times[i] + diff)) % 2400; } }Speichern Sie Ihre Arbeit mit STRG + S oder mithilfe des Visual Studio Code File-Menüs.
Öffnen Sie bei Bedarf das Visual Studio Code-Panel „Integriertes Terminal“.
Klicken Sie im Panel „Explorer“ mit der rechten Maustaste auf TestProject, und klicken Sie dann auf In integriertem Terminal öffnen, um ein Terminal am Speicherort des TestProject-Ordners zu öffnen.
Geben Sie im Terminal den Befehl dotnet run ein.
Geben Sie -6 und +6 für die GMT-Eingabeaufforderungen ein.
Stellen Sie sicher, dass Ihr Code die folgende Ausgabe erzeugt:
Enter current GMT -6 Current Medicine Schedule: 8:00 12:00 16:00 20:00 Enter new GMT +6 New Medicine Schedule: 20:00 0:00 4:00 8:00Wenn Ihr Code unterschiedliche Ergebnisse anzeigt, müssen Sie ihn überprüfen, um den Fehler zu finden und Updates vorzunehmen. Führen Sie den Code erneut aus, um festzustellen, ob das Problem behoben wurde. Fahren Sie mit dem Aktualisieren und Ausführen des Codes fort, bis ihr Code die erwarteten Ergebnisse erzeugt.
Überprüfen Sie Ihr Wissen
Feedback
War diese Seite hilfreich?
No
Benötigen Sie Hilfe zu diesem Thema?
Möchten Sie versuchen, Ask Learn zu verwenden, um Sie durch dieses Thema zu klären oder zu leiten?