Geburtstagsnachricht in Kotlin erstellen

In diesem Codelab erstellen Sie ein kleines Kotlin-Programm, mit dem eine Geburtstagsnachricht mit einem Kuchen und einem Geburtstagsbanner gedruckt wird.

Vorbereitung

  • Code im https://try.kotlinlang.org/, einem browserbasierten Kotlin-Programmiertool, öffnen und bearbeiten
  • In diesem Codelab erfährst du mehr über das "Hello world!"-Programm.
  • Mit println() Text in der Konsole des Online-Kotlin-Codeeditors schreiben

Lerninhalte

  • Drucken komplexerer Texte aus Ihrem Programm.
  • Einfache Berechnungen in Kotlin durchführen und die Ergebnisse zur späteren Verwendung in Variablen speichern.
  • So erstellen Sie eine Funktion, um denselben String mehrmals zu drucken.
  • Erstellen einer Schleife, bei der ein Text-Snippet mehrmals gedruckt wird

Umfang

  • Dazu erstellst du ein kurzes Programm, mit dem du zum Beispiel Geburtstagsnachrichten, ein textbasiertes Bild einer Kuchen und ein Banner drucken kannst.

Voraussetzungen

  • Einen Computer mit Internetzugang und einem modernen Webbrowser, beispielsweise die neueste Version von Chrome

Startcode einrichten

  1. Öffnen Sie https://try.kotlinlang.org/ in Ihrem Browser. Dadurch wird ein browserbasiertes Kotlin-Programmiertool geöffnet.
  2. Prüfen Sie im Datei-Explorer, ob die Beispiele Hello World! > Simplest Version > SimplestVersion.kt ist ausgewählt. Im Code-Editor wird das Programm Hello world! angezeigt.
  3. Wenn Sie den Code mit den vorherigen Änderungen sehen, ist das möglich. Klicken Sie neben dem Dateinamen auf Rückgängig machen, um den ursprünglichen Status des Programms wiederherzustellen.

  1. In der Definition von fun main() entfernen Sie das Argument „args: Array<String>“, weil Sie es nicht verwenden werden. Sie wird im Standardcode im Editor bereitgestellt, ist aber nicht zwingend erforderlich. Die erste Zeile deines Programms sollte nun wie unten angegeben aussehen.
fun main(){
  1. Ersetze den Text "Hello, world!" in der Funktion fun main() durch "Happy Birthday, Rover!".
  2. Fügen Sie darunter unterhalb der geschweiften Klammern zwei weitere Zeilen zum Drucken ein: "You are already 5!" und "5 is the very best age to celebrate!"..

Der fertige Code sollte so aussehen.

fun main() {
    println("Happy Birthday, Rover!")
    println("You are already 5!")
    println("5 is the very best age to celebrate!")
}
  1. Führen Sie den Code aus.
  2. Prüfen Sie, ob auf dem Tab Konsole Alles Gute zum Geburtstag, Rover! und darunter Sie sind bereits 5 Jahre und 5 ist das beste Alter!

Geburtstagstorte hinzufügen

Eine Geburtstagsnachricht benötigt ein Geburtstagsbild. Zum Beispiel ein Kuchen. Du kannst deiner Geburtstagsnachricht eine Torte hinzufügen, indem du zusätzliche Zeilen druckst, bei denen die Buchstaben und Symbole auf deinen Tastaturen und println() verwendet werden.

Fahren Sie mit dem Lösungscode oben fort.

  1. Fügen Sie in Ihrem Code zwischen den beiden println()-Anweisungen für Happy Birthday und You are already 5 die folgenden Zeilen mit Druckaufträgen hinzu, wie unten dargestellt. Daraus wird ein Kuchen erstellt. Die letzte println()-Anweisung enthält keinen Text zwischen den Anführungszeichen, sodass eine leere Zeile gedruckt wird.
    println("   ,,,,,   ")
    println("   |||||   ")
    println(" =========")
    println("@@@@@@@@@@@")
    println("{~@~@~@~@~}")
    println("@@@@@@@@@@@")
    println("")

Du kannst deinem Kind helfen, deinen Code zu verstehen, indem du einen Kommentar hinzufügst, bevor du den Kuchenbericht ausdruckst. Wenn Sie den Code ausführen, sieht die Ausgabe nicht anders aus, da Kommentare nur für Sie und andere Entwickler gedacht sind und nicht für Befehle für das System. Ein Inline-Kommentar beginnt mit //, gefolgt von einem Text, wie unten dargestellt.

// This is a comment line
// This is another comment
  1. Füge einen Kommentar hinzu, bevor du den Kuchen ausdruckst: // Let's print a cake!.
  2. Fügen Sie einen Kommentar hinzu, bevor Sie die leere Zeile drucken: // This prints an empty line.

Der Code sollte folgendermaßen aussehen:

fun main() {
    println("Happy Birthday, Rover!")
    
    // Let's print a cake!
    println("   ,,,,,   ")
    println("   |||||   ")
    println(" =========")
    println("@@@@@@@@@@@")
    println("{~@~@~@~@~}")
    println("@@@@@@@@@@@")
    
    // This prints an empty line.
    println("")

    println("You are already 5!")
    println("5 is the very best age to celebrate!")
}
  1. Wenn Sie den Code ausführen, sollte die Ausgabe wie im Screenshot unten aussehen.

Rover-Alter in einer Variablen speichern

  1. Sieh dir in deinem fertigen Code an, wie du dieselbe Altersgruppe zweimal wiederholt.

Statt diese Zahl zu wiederholen, können Sie sie als Variable an einem Ort speichern. Das ist so, als würden Sie Ihre Nummer in einen Schachtel geben und ihr einen Namen geben. Sie können diesen Variablennamen dann jederzeit verwenden. Bei einer Änderung des Alters musst du das Programm nur an einem Ort ändern. Wenn Sie die Variable ändern, wird überall dort, wo die Variable verwendet wird, der richtige Wert für das Alter angegeben.

  1. Fügen Sie in Ihrem Programm als erste Zeile des Codes in der Funktion main( den folgenden Code ein, um eine Variable mit dem Namen age zu erstellen, die den Wert 5 hat (siehe unten). Sie müssen diese Zeile vor den println()-Anweisungen einfügen.
val age = 5

Diese Zeile bedeutet:

  • val ist ein spezielles Wort, das von Kotlin verwendet wird und als Keyword bezeichnet wird. Es gibt jedoch den Namen einer Variablen an.
  • age der Name der Variablen.
  • Mit = kann der Wert von age (links) mit dem Wert rechts übereinstimmen. In der Mathematik wird durch ein einzelnes Gleichheitszeichen bestätigt, dass die Werte auf beiden Seiten identisch sind. Anders als bei Mathematik wird bei einem Kotlin-Zeichen ein einziges Gleichheitszeichen verwendet, um den Wert rechts der benannten Variablen auf der linken Seite zuzuweisen.

Ein Entwickler sieht dies so aus: In dieser Zeile wird eine Variable mit dem Namen age deklariert, deren zugewiesener Wert 5 ist.

Wenn Sie eine Variable in einer Druckanweisung verwenden möchten, müssen Sie sie mit Symbolen umgeben, die dem System signalisieren, dass es sich nicht um Text handelt, sondern um eine Variable. Statt Text zu drucken, muss auch der Wert der Variablen ausgegeben werden. Setzen Sie hierzu Ihre Variable in geschweifte Klammern, denen ein Dollarzeichen vorangestellt ist, wie im Beispiel unten.

${variable}
  1. Ersetze in deinem Code die Zahl 5 in beiden Print-Anweisungen durch die Variable age (siehe unten).
println("You are already ${age}!")
println("${age} is the very best age to celebrate!")
  1. Führen Sie Ihren Code aus. Dann sollten beide Nachrichten dasselbe Alter haben.
  2. Ändern Sie den Wert der Variablen in einen anderen. So kannst du zum Beispiel das Alter von Rover in Tagen anstelle von Jahren anzeigen. Multipliziere dazu das Alter mit 365 und gib keine Schaltjahre ein. Sie können diese Berechnung direkt ausführen, wenn Sie die Variable erstellen (siehe unten).
val age = 5 * 365
  1. Führen Sie den Code noch einmal aus. Sie sehen nun, dass beide Nachrichten das Alter in Tagen angeben.

  1. [Optional] Ändern Sie den Text der Drucknachrichten, damit er bei bestimmten Tagen besser funktioniert. Ändern Sie sie beispielsweise so:
You are already 1825 days old!
1825 days old is the very best age to celebrate!

Text in eine Variable einfügen

Sie können nicht nur Zahlen in Variablen einfügen, sondern auch Text.

  1. Fügen Sie unter der Variablen für age die Variable name für den Namen der Geburtstagsperson hinzu und setzen Sie ihren Wert auf "Rover".
val name = "Rover"
  1. Ersetzen Sie den Namen Rover in der Geburtstagsnachricht durch die Variable, wie unten dargestellt.
println("Happy Birthday, ${name}!")

In einem Ausdruck können mehrere Variablen definiert werden.

  1. Fügen Sie der Nachricht zum Alter der Person wie unten beschrieben Rover hinzu. Verwenden Sie dazu die Variable name.
println("You are already ${age} days old, ${name}!")

Der fertige Code sollte in etwa so aussehen:

fun main() {
    
    val age = 5 * 365
    val name = "Rover"
    
    println("Happy Birthday, ${name}!")
    
    // Let's print a cake!
    println("   ,,,,,   ")
    println("   |||||   ")
    println(" =========")
    println("@@@@@@@@@@@")
    println("{~@~@~@~@~}")
    println("@@@@@@@@@@@")
    
    // This prints an empty line.
    println("")

    println("You are already ${age} days old, ${name}!")
    println("${age} days old is the very best age to celebrate!")
}

Glückwunsch! Sie können jetzt Nachrichten mit Text, aus Symbolen erstellte Grafiken, Variablen zum Speichern von Zahlen und Text und zum Drucken von Text mithilfe von Variablen erstellen.

In dieser Aufgabe erstellen Sie ein Geburtstagsbanner und erfahren dann, wie Sie den Code mit Methoden zur Wiederholung und Wiederverwendung von Code vereinfachen und warum das in Ordnung ist.

Banner zum Starter-Geburtsdatum erstellen

  1. Platzieren Sie den Cursor unter https://try.kotlinlang.org/ innerhalb des Codes.
  2. Klicken Sie mit der rechten Maustaste, um das Kontextmenü zu öffnen, und wählen Sie Alle auswählen (Strg + A) aus.
  3. Drücken Sie die Rücktaste oder die Entf-Taste, um den gesamten Code zu löschen.
  4. Kopieren Sie den Code unten und fügen Sie ihn in den Editor ein.
fun main() {
    println("=======================")
    println("Happy Birthday, Jhansi!")
    println("=======================")
}
  1. Führen Sie Ihr Programm aus, um ein Banner aufzurufen, das in der Konsole gedruckt wird.
=======================
Happy Birthday, Jhansi!
=======================

Funktion zum Drucken des Rahmens erstellen

Der Code, den Sie gerade eingefügt und ausgeführt haben, ist die Funktion main(), die drei Druckaufträge enthält. Wenn Sie auf Ausführen klicken, führt das System die Funktion und den gesamten Code darin aus.

Dein Kotlin-Programm muss immer eine main()-Funktion haben. Außerdem haben Sie die Möglichkeit, eigene Funktionen zu erstellen und zu verwenden. Genau wie bei Variablen, können Sie dabei vermeiden, denselben Code mehrfach zu schreiben, sondern Sie können damit denselben Code nicht mehrfach schreiben. Die Druckbelege oben und unten auf dem Banner sind identisch. Erstellen und verwenden Sie eine Funktion zum Drucken dieser Grenzen.

  1. Fügen Sie im Editor unter der Funktion main() eine leere Zeile ein, um Platz für die Arbeit zu schaffen. Leere Zeilen werden ignoriert und Sie können sie an anderer Stelle einfügen, wenn es für die Organisation Ihres Codes hilfreich ist.
  2. Erstellen Sie eine Funktion. Beginnen Sie mit dem Keyword fun, gefolgt vom Namen printBorder, einem Paar Klammern () und einem geschweiften Klammernpaar {}, wie unten dargestellt.
fun printBorder() {}

Noch eine Sache zur Benennung von Funktionen.

  • Der Name der Funktion printBorder beginnt mit einem Kleinbuchstaben und einem Verb. Funktionsnamen beginnen fast immer mit einem Kleinbuchstaben und einem Verb. Der Name sollte die Funktion der Funktion beschreiben. Zum Beispiel print() oder hier printBorder().
  • Beachten Sie, dass das zweite Wort innerhalb des Namens mit einem Großbuchstaben beginnt. Dieser Stil heißt „Kamelbuchstab“ und macht Namen leichter zu lesen. Weitere Beispiele für Namen sind drawReallyCoolFancyBorder und printBirthdayMessage.
  1. Setzen Sie die schließende geschweifte Klammer } der Funktion printBorder in eine neue Zeile und fügen Sie eine leere Zeile zwischen den beiden geschweiften Klammern ein, um Platz für zusätzliches Code zu schaffen. Fügen Sie eine geschweifte Klammer } in eine eigene Zeile ein, um leichter erkennen zu können, wo die Funktion endet.
  2. Kopieren Sie in der main()-Funktion die Druckanweisung für den Rahmen und fügen Sie sie zwischen den geschweiften Klammern der Funktion printBorder() ein.

Die fertige printBorder()-Funktion sollte so aussehen.

fun printBorder() {
    println("=======================")
}

Um eine Funktion zu verwenden oder aufzurufen, geben Sie deren Namen in Klammern ein. So nutzen Sie println()! Um die Funktion printBorder zu verwenden, rufen Sie printBorder()überall dort in Ihrem Code auf.

  1. Ersetze in der main()-Funktion die Codezeilen, die mit println() eine Rahmenlinie drucken, durch Aufrufe der Funktion printBorder(). Der fertige Code sollte so aussehen.
fun main() {
    printBorder()
    println("Happy Birthday, Jhansi!")
    printBorder()
}

fun printBorder() {
    println("=======================")
}
  1. Führen Sie Ihren Code aus, um sicherzustellen, dass alles wie zuvor funktioniert.

Hinweis: Wenn Sie den Code in Code umwandeln, um die Zusammenarbeit zu erleichtern oder zu vereinfachen, ohne dass sich die Ausgabe ändert, nennen wir das Label refaktoring".

Rahmenmuster wiederholen

Die Grenze wird dargestellt. Sie ist immer wieder dasselbe Symbol. Statt zu sagen:

" Dieser String mit 23 Symbolen drucken"

könnten Sie sagen,

1 Drucken Sie dieses Symbol 23 Mal aus.

Im Code verwenden Sie dazu eine repeat()-Anweisung.

  1. Verwenden Sie in der printBorder()-Methode eine repeat()-Anweisung, um das Gleichheitszeichen 23-mal zu drucken.
  2. Statt println() sollte print() verwendet werden, sodass Sie nach dem Drucken der einzelnen Zeilen nicht zu einer neuen Zeile springen.

Hier ist der Code. Sie müssen jetzt in einer einzigen Anweisung das Gleichheitszeichen ausdrucken und sich dann 23-mal wiederholen, indem Sie eine repeat()-Anweisung verwenden.

fun printBorder() {
    repeat(23) {
        print("=")
    }
}
  • Die repeat()-Anweisung beginnt mit dem Wort repeat, gefolgt von (). Diese Art von Aussage wird als Schleife bezeichnet, da sich derselbe Code mehrmals wiederholt. Weitere Möglichkeiten zum Erstellen von Schleifen finden Sie später.
  • In den Klammern () steht die Anzahl der Wiederholungen,
  • gefolgt von geschweiften Klammern {},
  • und in den geschweiften Klammern {} steht der Code, der wiederholt werden soll.
  1. Fügen Sie innerhalb der Methode printBorder() nach der schließenden geschweiften Klammer } der repeat()-Anweisung eine println()-Anweisung hinzu, nachdem Sie den Rand gedruckt haben.

Der Code sollte nun so aussehen:

fun printBorder() {
    repeat(23) {
        print("=")
    }
    println()
}

Der Code in der main()-Funktion ändert sich nicht und dein gesamtes Programm sollte in etwa so aussehen:

fun main() {
    printBorder()
    println("Happy Birthday, Jhansi!")
    printBorder()
}

fun printBorder() {
    repeat(23) {
        print("=")
    }
    println()
}
  1. Führen Sie den Code aus. Die Ausgabe sollte der gleichen sein wie zuvor, aber diesmal konnten Sie den Rahmen durch die Angabe des "="-Symbols erstellen.
=======================
Happy Birthday, Jhansi!
=======================

Rahmen verwenden, um den Rahmen zu ändern

Sie können auch Rahmen mit anderen Symbolen erstellen, beispielsweise mit den unten aufgeführten Symbolen.

%%%%%%%%%%%%%%%%%%%%%%%

********************************************************

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

Sie können für jedes dieser Symbole eine eigene Funktion definieren. Es gibt jedoch eine effizientere Möglichkeit, dies zu ermöglichen. Sie können die bereits geschriebene Funktion wiederverwenden und für mehr Flexibilität sorgen, sodass sie für verschiedene Arten von Symbolen funktioniert.

Das Tolle an Funktionen ist, dass Sie ihnen Eingaben mithilfe von Argumenten geben können. In einem vorherigen Codelab kamst du kurz darauf vor, als du dich mit main() vertraut gemacht hast. In diesem Schritt fügen Sie der Funktion printBorder() ein Argument hinzu, damit alle von Ihnen angegebenen Rahmenmuster gedruckt werden können.

  1. Erstellen Sie oben in main() eine Variable mit dem Namen border für das Rahmenmuster. Dadurch wird Text wiederholt, der für den Rahmen wiederholt wird.
val border = "%"
  1. Diese border-Variable muss als Argument in beide Aufrufe der Funktion printBorder() übergeben werden. Füge hierzu border in die Klammern () ein, genau so, wie du auch Text für println() angegeben hast.

Die Funktion main() sollte so aussehen:

fun main() {
    val border = "%"
    printBorder(border)
    println("Happy Birthday, Jhansi!")
    printBorder(border)
}

Die printBorder()-Funktion verwendet den Wert von border als Eingabe und ermittelt, wie der vollständige Rand gedruckt wird.

  1. Führen Sie den Code aus.Der Code wird nicht ausgeführt und stattdessen werden Fehlersymbole neben dem Code angezeigt.

  1. In der Problemansicht sehen Sie eine Fehlermeldung.

Wie bisher erhalten Sie bei dieser Nachricht einen Hinweis auf den möglichen Fehler und erhalten einen Hinweis auf mögliche Fehler. Der wichtige Teil ist: Too many arguments for public fun printBorder(). Sie rufen die Funktion printBorder() auf und übergeben einen Rahmen als Eingabe. Die Funktionsdefinition printBorder() akzeptiert derzeit jedoch keine Eingaben.

  1. Fügen Sie der Funktionsdefinition printBorder() ein Argument für den Rahmen hinzu, um diesen Fehler zu beheben. Sehen Sie sich dazu die erste Codezeile an, die unten dargestellt ist.
fun printBorder(border: String) {
    repeat(23) {
        print("=")
    }
    println()
}
  • Der Name des Arguments lautet border.
  • Auf den Namen folgt ein Doppelpunkt :
  • und das Wort String, eine Beschreibung der Art oder Art des Arguments, das dies ist.

Ein String ist ein Text aus Anführungszeichen. Stellen Sie sich das als eine Art Perlenkette vor, die eine Halskette bilden, beispielsweise Figuren, die zu Worten und Text passen. Wenn du angibst, dass das Argument ein String sein muss, kann das System erzwingen, dass dein Argument Text ist, und nicht eine Zahl.

  1. Führen Sie den Code aus. Die Funktion printBorder() akzeptiert jetzt einen Rahmen String als Eingabe. Und der Code in main() ruft printBorder(border) mit border als Argument auf. Der Code sollte ohne Fehler ausgeführt werden.
  2. Sehen Sie sich die Ausgabe des Programms in der Console an. Dabei wird weiterhin der gleiche Rand wie zuvor angezeigt?
=======================
Happy Birthday, Jhansi!
=======================

Das ist nicht beabsichtigt. Du hast versucht, einen Rahmen mit dem &-Zeichen zu setzen, aber das Programm druckt immer noch einen Rand mit dem &zeichen-Symbol. In den nächsten Schritten untersuchen Sie die Gründe.

  1. Im Editor sehen Sie ein graues Ausrufezeichen. Es weist auf eine Warnung hin. Warnungen betreffen Probleme mit dem Code, die Sie beheben sollten. Sie verhindern jedoch, dass der Code ausgeführt wird.

  1. Wechseln Sie zur Ansicht Probleme und lesen Sie die Warnung. Sie lautet "Parameter 'border' is never used.". Diese Warnung erklärt das Problem mit der Ausgabe. Sie übergeben einen neuen String für den Rahmen an die Funktion, verwenden ihn aber nicht zum Drucken.
  1. Ändern Sie die Funktion printBorder() so, dass die übergebene border verwendet wird, statt die &&quoquot;=" zu drucken. Das funktioniert genauso wie border, eine Variable, die Sie in der Funktion definiert haben.
fun printBorder(border: String) {
    repeat(23) {
        print(border)
    }
    println()
}
  1. Führen Sie den Code noch einmal aus. Die Ausgabe sollte in etwa so aussehen:
%%%%%%%%%%%%%%%%%%%%%%%
Happy Birthday, Jhansi!
%%%%%%%%%%%%%%%%%%%%%%%

Gut gemacht! Sie haben das Problem behoben. Hier ist dein fertiger Code.

fun main() {
    val border = "%"
    printBorder(border)
    println("Happy Birthday, Jhansi!")
    printBorder(border)
}

fun printBorder(border: String) {
    repeat(23) {
        print(border)
    }
    println()
}

Du hast die Funktion printBorder() wesentlich flexibler gestaltet, ohne viel Code hinzufügen zu müssen. Du kannst jetzt mit nur einer kleinen Änderung einen Rahmen mit unterschiedlichen Symbolen drucken.

  1. [Optional] Sie haben auch die Möglichkeit, Geburtstagsbanner auszudrucken, indem Sie in der Funktion main() nur eine einzige Codezeile ändern.
***********************
Happy Birthday, Jhansi!
***********************
:::::::::::::::::::::::
Happy Birthday, Jhansi!
:::::::::::::::::::::::

Funktion ändern, um zwei Argumente zu erhalten

Falls du ein anderes Muster verwenden möchtest, das länger als 1 Zeichen ist, sag "`-._,-'". Sie würden das Muster nicht 23-mal wiederholen, da es zu lang wäre. Sie können es bis zu viermal wiederholen. Dazu kannst du die Anzahl der Wiederholungen in der repeat()-Anweisung von printBorder() ändern. Sie können aber etwas Besseres tun!

Sie können einen Fancend-Rahmen auf zweierlei Weise definieren:

  • Das zu wiederholende Muster (das Sie bereits getan haben)
  • Die Anzahl der Wiederholungen für das Muster

Du kannst für jede Methode, jedes Muster und jede Zahl von Wiederholungen Variablen erstellen und dann beide Informationen an die Funktion printBorder() übergeben.

  1. Ändern Sie in main() den Rahmen so, dass er das Muster "`-._,-'" enthält.
val border = "`-._,-'"
  1. Führen Sie Ihren Code aus und beachten Sie, dass das Muster jetzt zu lang ist.
  2. Erstellen Sie in main() unter der Definition von border eine neue Variable mit dem Namen „timesToRepeat“ für die Anzahl der Wiederholungen. Setzen Sie den Wert auf 4.
val timesToRepeat = 4
  1. Fügen Sie in main() beim Aufrufen von printBorder() die Anzahl der Wiederholungen als zweites Argument hinzu. Trennen Sie die beiden Argumente durch ein Komma.
printBorder(border, timesToRepeat)

Die Funktion main() sollte jetzt so aussehen:

fun main() {
    val border = "`-._,-'"
    val timesToRepeat = 4
    printBorder(border, timesToRepeat)
    println("Happy Birthday, Jhansi!")
    printBorder(border, timesToRepeat)
}

Wie zuvor zeigt Ihnen dieser Code einen Fehler, da Sie mehr Argumente haben als printBorder(), als in der Definition von printBorder().

  1. Korrigieren Sie printBorder(), um auch die Anzahl der Wiederholungen zu akzeptieren. Fügen Sie nach dem Argument ein Komma gefolgt vom zusätzlichen Argument ein: timesToRepeat: Int. Die erste Zeile der Funktionsdefinition sieht jetzt so aus:
fun printBorder(border: String, timesToRepeat: Int) {

Hinweis:

  • Die beiden Argumente werden durch ein Komma getrennt.
  • timesToRepeat der Name des Arguments,
  • gefolgt von einem Doppelpunkt:-Symbol
  • und der Typ: Int. timesToRepeat ist eine Zahl. Statt ihn also vom Typ String zu machen, musst du den Typ Int vornehmen, der für eine Ganzzahl und eine ganze Zahl steht.
  1. Ändern Sie repeat in printBorder() so, dass das Argument timesToRepeat anstelle der Zahl 23 verwendet wird. Ihr printBorder()-Code sollte in etwa so aussehen:
fun printBorder(border: String, timesToRepeat: Int) {
    repeat(timesToRepeat) {
        print(border)
    }
    println()
}
  1. Führen Sie den Code aus. Und die Ausgabe sieht wie unten dargestellt aus.
`-._,-'`-._,-'`-._,-'`-._,-'
Happy Birthday, Jhansi!
`-._,-'`-._,-'`-._,-'`-._,-'
  1. Damit diese Ausgabe perfekt ist, fügen Sie am Anfang der Nachricht „Happy Geburtstag“ zwei Leerzeichen ein. Die Ausgabe sieht dann so aus:
`-._,-'`-._,-'`-._,-'`-._,-'
  Happy Birthday, Jhansi!
`-._,-'`-._,-'`-._,-'`-._,-'

Hier ist der endgültige Code für Ihr Banner:

fun main() {
    val border = "`-._,-'"
    val timesToRepeat = 4
    printBorder(border, timesToRepeat)
    println("  Happy Birthday, Jhansi!")
    printBorder(border, timesToRepeat)
}

fun printBorder(border: String, timesToRepeat: Int) {
    repeat(timesToRepeat) {
        print(border)
    }
    println()
}

Glückwunsch! Mithilfe von Funktionen, Argumenten, Variablen und einer wiederkehrenden Schleife haben Sie grundlegende Bausteine gelernt, die in fast allen Programmen verwendet werden.

Gönnen Sie sich eine Pause und gehen Sie dann zur nächsten Aufgabe, in der Sie weitere Funktionen und Schleifen erstellen und mit nur wenigen Programmierkenntnissen die Wirkung einer riesigen Kuchen mit der richtigen Anzahl von Kerzen herstellen können.

In dieser Aufgabe aktualisieren Sie den Geburtstagskuchencode und wählen die passende Anzahl von Kerzen für jedes Alter aus.

  • Sie erstellen insgesamt drei Funktionen zum Zeichnen eines Schichtkuchens mit Kerzen.
  • Du verwendest eine repeat() in einer anderen repeat() und erstellst eine sogenannte „verschachtelte Schleife“.
  • Die Methode zur Erstellung dieses Codes besteht darin, wie Sie ein Programm aufbauen, beginnend mit dem Gesamtbild und dem Hinzufügen von Details. Das wird als „Top-Down-Entwicklung“ bezeichnet.
  • Die Anweisungen sind nicht so detailliert für diese Übung und Sie können den fertigen Code verwenden, wenn Sie nicht mehr weiterkommen.

Hier ist ein Bild des Kuchens, den du backen möchtest:

Und hier ist die Anleitung:

Hauptfunktion erstellen

  1. Setze deinen Code im Editor auf das Hello, world!-Programm zurück.
  2. Du kannst das Argument für main() entfernen, weil du es nicht mehr verwenden möchtest.
  3. Erstellen Sie in main() die Variable age und setzen Sie sie auf 24.
  4. Erstellen Sie in main() eine zweite layers-Variable und setzen Sie sie auf 5.
  5. Rufe in main() eine Funktion auf printCakeCandles() und übergib den age. Daraufhin wird ein Fehler zurückgegeben, da Sie diese Funktion noch nicht erstellt haben.
  6. Gleichermaßen rufe eine Funktion printCakeTop() auf und übergib auch die age.
  7. Rufen Sie zuletzt eine Funktion printCakeBottom() auf und übergeben Sie age und die Anzahl von layers.
  8. Kommentieren Sie die drei Funktionsaufrufe, indem Sie am Anfang jeder Zeile // einfügen (siehe unten). Mit diesem Verfahren können Sie einen Codeentwurf erstellen, ohne Fehler auszulösen.
  9. Führe dein Programm aus, es sollte keine Fehler enthalten und nichts tun.

Die Funktion main() sollte so aussehen:

fun main() {
    val age = 24
    val layers = 5
    // printCakeCandles(age)
    // printCakeTop(age)
    // printCakeBottom(age, layers)
}

PrintCakeTop() erstellen

Die Funktion printCakeTop() zum Drucken des oberen Rands des Kuchens, eine Reihe gleicher Zeichen, entspricht fast der Funktion printBorder(), die Sie zuvor in diesem Codelab erstellt haben.

==========================
  1. Fügen Sie unter der Funktion main() eine leere Zeile hinzu und erstellen Sie dann eine Funktion printCakeTop(), die das Argument age vom Typ Int annimmt.
  2. Führen Sie darin mit der repeat()-Anweisung ein Gleichheitszeichen age-mal plus 2 aus. Die zusätzlichen beiden Gleichheitszeichen sind vorhanden, damit die Kerzen nicht von der Torte fallen.
  3. Wenn repeat() fertig ist, drucken Sie eine leere Zeile.
  4. Entfernen Sie in main() die beiden //-Symbole am Anfang der Codezeile für printCakeTop(), da die Funktion jetzt vorhanden ist.
printCakeTop(age)

Hier ist die fertige Funktion.

fun printCakeTop(age: Int) {
    repeat(age + 2) {
        print("=")
    }
    println()
}
  1. Führe deinen Code aus, um den oberen Teil der Kuchen zu sehen.

PrintCakeCandles() erstellen

Jede Kerze besteht aus zwei Symbolen. Ein Komma . Für eine Flamme und eine senkrechte Linie | für den Kerzenkörper.

,,,,,,,, , , ,,,,,

||||||||||||||||||o.

Dazu verwenden Sie zwei repeat()-Anweisungen: eine für die Flammen und eine für die Körper.

  1. Erstellen Sie unterhalb der Funktion main() und der Funktion printCakeTop() eine neue Funktion: printCakeCandles(), die ein Argument, age vom Typ Int, verwendet.
  2. Verwenden Sie darin eine repeat()-Anweisung, um ein Komma , für die Flamme zu drucken.
  3. Wiederholen Sie diesen Vorgang age-mal.
  4. Drucken Sie am Ende eine leere Zeile aus.
  5. Fügen Sie eine print()-Anweisung hinzu, um einen Platz zum Einsetzen der Kerzen zu drucken.
  6. Wiederholen Sie die Schritte unten, um eine zweite repeat()-Anweisung zu erstellen und die Kerzen mit einer senkrechten Linie zu drucken |
  7. Entfernen Sie in main() die beiden //-Symbole am Anfang der Codezeile für printCakeCandles().
printCakeCandles(age)
  1. Löse deinen Code, um den oberen Teil der Torte und die Kerzen zu sehen

Lösung:

fun printCakeCandles(age: Int) {
    print (" ")
    repeat(age) {
        print(",")
    }    
    println() // Print an empty line   
 
    print(" ") // Print the inset of the candles on the cake
    repeat(age) {
        print("|")
    }    
    println()
}

PrintCakeunten() erstellen

In dieser Funktion zeichnen Sie einen Kuchenboden, der so breit wie age + 2 ist, und zeichnen ihn für eine Höhe einer bestimmten Anzahl von Ebenen.

@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@
  • Das bedeutet, dass die Funktion zwei Argumente benötigt – eines für die Breite (age) und eines für die Höhe (layers).
  • Wenn du die untere Ecke des Kuchens drucken möchtest, wiederhole zuerst das &&33;@-Symbol age + 2-mal, um eine Ebene auszudrucken. Anschließend wiederholen Sie diesen Vorgang layers-mal.

Zeichenebenen wiederholen

Zeichnen Sie das @-Zeichen „Alter“+2-mal, um eine Ebene zu erstellen.

  1. Erstellen Sie unter den vorhandenen Funktionen eine Funktion printCakeBottom() mit den beiden Argumenten age und layers, beide vom Typ Int.
  2. Verwenden Sie in der Funktion eine repeat()-Anweisung, um eine Ebene von @-Symbolen age + 2-mal auszudrucken. Drucken Sie, wie unten dargestellt, eine leere Zeile aus.
fun printCakeBottom(age: Int, layers: Int) {
    repeat(age + 2) {
        print("@")
    }
    println()
}
  1. Führe den Code aus, um zu prüfen, ob er eine Zeile für Kuchen auf dem Boden ausgibt.
 ,,,,,,,,,,,,,,,,,,,,,,,,
 ||||||||||||||||||||||||
==========================
@@@@@@@@@@@@@@@@@@@@@@@@@@

Verschachtelte repeated()-Anweisungen

Wenn du mehrere identische Kuchenebenen drucken möchtest, kannst du zum Beispiel sagen:

Wiederholen Sie für Ebene 1 12-mal das Symbol: @@@@@@@@@@

Wiederholen Sie für Ebene 2 das Symbol 12-mal: @@@@@@@@@@

Wiederholen Sie für Ebene 3 das Symbol 12-mal: @@@@@@@@@@

Oder sagen Sie prägnanter als:

Wiederholen Sie diesen Vorgang für drei Ebenen:

Wiederholen Sie das Symbol zwölfmal.

@@@@@@@@@@@.

@@@@@@@@@@@.

@@@@@@@@@@@.

Das ist etwas Neues, was mit repeat()-Anweisungen möglich ist. Sie können eine repeat()-Anweisung in eine andere repeat()-Anweisung einfügen. So kannst du eine repeat()-Anweisung in einer repeat()-Anweisung erstellen, um das Symbol für eine bestimmte Anzahl von Ebenen zu drucken.

Das können wir zum Drucken von Kuchenschichten erledigen.

  1. Fügen Sie den gesamten Code in der Funktion in einer zweiten repeat()-Anweisung ein. Wiederholen Sie diese Schleife layers Mal.
  2. Entfernen Sie in main() nur die beiden // aus der Codezeile für printCakeBottom().
printCakeBottom(age, layers)
  1. Führe deinen Code aus, um alle Kuchen zu sehen.

Lösung für printCakeBottom().

fun printCakeBottom(age: Int, layers: Int) {
    repeat(layers) {
        repeat(age + 2) {
            print("@")
        }
        println()
    }    
}

Glückwunsch! Du hast gerade ein ziemlich komplexes Programm mit mehreren Funktionen und einer verschachtelten repeat-Anweisung beendet. Und deinem Kuchen wird immer die richtige Anzahl von Kerzen zugeordnet!

Die endgültige Ausgabe deines Programms sollte so aussehen:

 ,,,,,,,,,,,,,,,,,,,,,,,,
 ||||||||||||||||||||||||
==========================
@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@

Lösungscode

fun main() {
    val age = 24
    val layers = 5
    printCakeCandles(age)
    printCakeTop(age)
    printCakeBottom(age, layers)
}

fun printCakeCandles(age: Int) {
    print (" ")
    repeat(age) {
          print(",") // Print an empty line
    }    
    println()    

    print(" ") // Print the inset of the candles on the cake
    repeat(age) {
        print("|")
    }    
    println()
}

fun printCakeTop(age: Int) {
    repeat(age + 2) {
        print("=")
    }
    println()
}

fun printCakeBottom(age: Int, layers: Int) {
    repeat(layers) {
        repeat(age + 2) {
            print("@")
        }
        println()
    }    
}
  • Mit ${} können Sie Variablen und Berechnungen in den Text der Druckaufträge einschließen. Beispiel: ${age}, wobei age eine Variable ist.
  • Erstellen Sie eine Variable mit dem Keyword val und einem Namen. Nach dem Festlegen kann dieser Wert nicht mehr geändert werden. Weisen Sie einer Variable mit dem Gleichheitszeichen einen Wert zu. Werte sind Text und Zahlen.
  • Ein String ist Text in Anführungszeichen, z. B. "Hello".
  • Int ist eine ganze positive oder negative Zahl, z. B. 0, 23 oder -1024.
  • Sie können ein oder mehrere Argumente an eine Funktion übergeben, die verwendet werden soll, z. B.:
    fun printCakeBottom(age:Int, layers:Int) {}
  • Mit einer repeat() {}-Anweisung kannst du mehrere Anleitungen mehrmals wiederholen. Beispiel: repeat (23) { print('%") } oder repeat (layers) { print("@@@@@@@@@@") }
  • Eine Schleife ist eine Anweisung zum Wiederholen mehrerer Anweisungen. Eine repeat()-Anweisung ist ein Beispiel für eine Schleife.
  • Sie können Schleifen verschachteln, d. h. Schleifen in Schleifen einfügen. So kannst du beispielsweise eine repeat()-Anweisung in einer repeat()-Anweisung erstellen, um ein Symbol mehrmals für eine Reihe von Zeilen zu drucken, ähnlich wie bei den Kuchenebenen.

Zusammenfassung der Funktionsargumente:Wenn Sie Argumente mit einer Funktion verwenden möchten, müssen Sie drei Schritte ausführen:

  • Argument und Typ der Funktionsdefinition hinzufügen: printBorder(border: String)
  • Verwenden Sie das Argument in der Funktion: println(border)
  • Geben Sie das Argument an, wenn Sie die Funktion aufrufen: printBorder(border)

Hier finden Sie die offizielle Dokumentation zu den Kotlin-Konzepten, die Sie in diesem Codelab gelernt haben.

Wenn der browserbasierte Kotlin-Programmiertool nicht Ihren Code ausführt oder Ihnen einen Fehler wie den folgenden anzeigt, können Sie Folgendes versuchen:

  • Aktualisiere die Seite mit der Umschalttaste.
  • Warten Sie eine Minute und versuchen Sie es dann noch einmal.