Utwórz wiadomość o urodzinach w Kotlin

W tym ćwiczeniu utworzysz krótki program Kotlin, który będzie drukował wiadomość urodzinową z tortem i banerem urodzinowym.

Wymagania wstępne

  • Jak otwierać i edytować kod w https://try.kotlinlang.org/ – narzędziu do programowania w Kotlin działającym w przeglądarce.
  • Dowiedz się, co to za program "Hello world!" w ramach pierwszego modułu ćwiczeń z programowania w Kotlin.
  • Jak używać println() do pisania tekstu w konsoli edytora online Kotlin.

Czego się nauczysz

  • Jak wydrukować bardziej złożony tekst z programu.
  • Jak wykonywać podstawowe działania matematyczne w Kotlin i zapisywać wyniki w zmiennych do późniejszego użycia.
  • Jak utworzyć funkcję druku tego samego ciągu kilka razy.
  • Jak utworzyć pętlę, która wielokrotnie drukuje fragment tekstu.

Co utworzysz

  • Utworzysz krótki program, który możesz wykorzystać do drukowania wiadomości o urodzinach, banerowy obrazek z tortem oraz baner.

Wymagania

  • Komputer z dostępem do internetu i nowoczesną przeglądarką, taką jak najnowsza wersja Chrome.

Skonfiguruj kod startowy

  1. W przeglądarce otwórz stronę https://try.kotlinlang.org/. Otworzy się oparte na przeglądarce narzędzie do programowania w Kotlin.
  2. W eksploratorze plików upewnij się, że Przykłady > Witaj, świecie! Wybrano > Simplest version > SimplestVersion.kt, a edytor kodu pokazuje program Hello world!.
  3. Jeśli widzisz kod z poprzednimi zmianami, nie ma problemu. Przywróć pierwotny stan programu, klikając strzałkę Cofnij obok nazwy pliku.

  1. W definicji fun main() usuń argument args: Array<String>, bo nie będziesz go używać. Znajdziesz go w kodzie domyślnym w edytorze, ale nie jest to obowiązkowe. Pierwszy wiersz programu powinien wyglądać jak poniżej.
fun main(){
  1. W funkcji fun main() zastąp tekst "Hello, world!" tekstem "Happy Birthday, Rover!".
  2. Poniżej w nawiasach klamrowych dodaj jeszcze 2 wiersze do wydrukowania: "You are already 5!" i "5 is the very best age to celebrate!"..

Gotowy kod powinien wyglądać następująco.

fun main() {
    println("Happy Birthday, Rover!")
    println("You are already 5!")
    println("5 is the very best age to celebrate!")
}
  1. Uruchom kod.
  2. Upewnij się, że na karcie Konsola widać komunikat Wszystkiego najlepszego, Rover!. Poniżej widać 5 lat! i 5 to najlepszy wiek, aby świętować!

Dodaj tort urodzinowy

Wiadomość o urodzinach musi mieć zdjęcie urodzinowe. To takie jak ciasto. Możesz dodać tort do wiadomości urodzinowej, drukując dodatkowe wiersze używające liter i symboli na klawiaturze i println().

Kontynuuj z powyższego kodu rozwiązania.

  1. W kodzie między wierszami println() obejmującymi Happy Birthday i You are already 5 dodaj te wiersze instrukcji drukowania tak jak poniżej. W ten sposób powstaje tort. Ostatnie wyrażenie println() nie zawiera tekstu pomiędzy cudzysłowami, co powoduje wydrukowanie pustego wiersza.
    println("   ,,,,,   ")
    println("   |||||   ")
    println(" =========")
    println("@@@@@@@@@@@")
    println("{~@~@~@~@~}")
    println("@@@@@@@@@@@")
    println("")

Aby ułatwić innym zrozumienie Twojego kodu, możesz dodać komentarz, zanim wydrukujesz tort. Jeśli uruchomisz kod, dane wyjściowe nie będą wyglądać inaczej, ponieważ komentarze to tylko informacje dla Ciebie i innych deweloperów, a nie dla poleceń systemowych. Wbudowany komentarz zaczyna się od ciągu //, po którym następuje tekst, jak widać poniżej.

// This is a comment line
// This is another comment
  1. Dodaj komentarz przed wydrukowaniem tortu: // Let's print a cake!.
  2. Przed wydrukowaniem pustego wiersza dodaj komentarz: // This prints an empty line.

Kod powinien wyglądać tak jak poniżej.

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. Uruchom kod, a wynik powinien wyglądać jak na zrzucie ekranu poniżej.

Wiek sklepu Rover&#39' w zmiennej

  1. W skończonym kodzie dostrzegasz, jak dwa razy powtarzasz ten sam numer wieku.

Zamiast powtarzać ten numer, możesz go zapisać w jednym miejscu jako zmienną. To jak umieszczenie numeru w polu i nadanie mu nazwy. Nazwy tej można używać w każdej chwili. A jeśli zmieni się wiek, wystarczy, że zmienisz program w jednym miejscu. Jeśli zmienisz zmienną, w każdym miejscu, w którym jest używana, zostanie wydrukowana prawidłowa wartość wieku.

  1. W programie, jako pierwszy wiersz kodu w funkcji main(), dodaj poniższy kod, aby utworzyć zmienną o nazwie age o wartości 5, jak pokazano poniżej. (Musisz wpisać ten wiersz przed instrukcją println()).
val age = 5

Ten wiersz oznacza:

  • val to specjalne słowo używane przez Kotlin jako słowo kluczowe, które wskazuje nazwę zmiennej.
  • age to nazwa zmiennej.
  • = sprawia, że wartość age (po lewej) jest taka sama jak wartość po prawej. W matematyce pojedynczy znak równości służy do potwierdzenia, że wartości po obu stronach są takie same. W Kotlinie (w przeciwieństwie do matematyki) do przypisywania nazwy wartości po lewej stronie służy pojedynczy znak równości.

Programista mówi tak: ten wiersz deklaruje zmienną o nazwie age, której przypisana wartość to 5.

Aby użyć zmiennej w wyciągu drukowanym, należy ją ująć w symbole informujące system, że następny element nie jest tekstem, ale zmienną. Zamiast drukować tekst, system musi wydrukować wartość zmiennej. Aby to zrobić, umieść zmienną wewnątrz nawiasów klamrowych poprzedzonych znakiem dolara, tak jak w przykładzie poniżej.

${variable}
  1. Zastąp kod 5 w 2 wyciągach drukowanych zmienną age w sposób podany poniżej.
println("You are already ${age}!")
println("${age} is the very best age to celebrate!")
  1. Uruchom kod. Obie wiadomości powinny pokazywać tę samą grupę wiekową.
  2. Zmień wartość zmiennej na inną. Na przykład możesz pokazywać wiek w Rover&#39, a nie w latach. Aby to zrobić, pomnóż wiek przez 365, pomijając lata przestępne. Obliczenia możesz wykonać podczas tworzenia zmiennej, jak pokazano poniżej.
val age = 5 * 365
  1. Ponownie uruchom kod i zauważ, że obie wiadomości pokazują teraz wiek w dniach.

  1. [Opcjonalnie] Zmień tekst wiadomości drukowanych, by lepiej działały w dniach. Zmień je na przykład w taki sposób:
You are already 1825 days old!
1825 days old is the very best age to celebrate!

Umieść tekst w zmiennej

Możesz używać nie tylko liczb w zmiennych, ale też tekstu.

  1. Poniżej zmiennej age dodaj zmienną o nazwie name dla osoby, która ją zawiera, i ustaw jej wartość na "Rover".
val name = "Rover"
  1. Zastąp nazwę Rover w wiadomości urodzinami zmienną widoczną poniżej.
println("Happy Birthday, ${name}!")

W podsumowaniu wydruku można mieć więcej niż jedną zmienną.

  1. Dodaj Rover do wiadomości o wieku, korzystając ze zmiennej name, jak pokazano poniżej.
println("You are already ${age} days old, ${name}!")

Ukończony kod powinien wyglądać mniej więcej tak.

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!")
}

Gratulacje! Możesz teraz tworzyć wiadomości z tekstem, grafikę utworzoną z symboli, używać zmiennych do przechowywania liczb i tekstu oraz drukować tekst za pomocą zmiennych.

W tym zadaniu utworzysz baner urodzinowy, a następnie dowiesz się, jak go uprościć, korzystając z technik powtarzania i ponownego wykorzystywania kodu. Dlaczego warto to zrobić?

Utwórz baner powitalny na początek

  1. Najedź kursorem na https://try.kotlinlang.org/ w kodzie kodu.
  2. Kliknij prawym przyciskiem myszy, aby otworzyć menu kontekstowe, i wybierz Zaznacz wszystko (Ctrl+A).
  3. Naciśnij Backspace lub Delete, aby usunąć cały kod.
  4. Skopiuj poniższy kod i wklej go w edytorze.
fun main() {
    println("=======================")
    println("Happy Birthday, Jhansi!")
    println("=======================")
}
  1. Uruchom program, aby wyświetlić baner wydrukowany w konsoli.
=======================
Happy Birthday, Jhansi!
=======================

Utwórz funkcję drukowania obramowania

Wklejony i uruchomiony kod to funkcja o nazwie main(), która zawiera trzy wyciągi. Po naciśnięciu przycisku Uruchom system wykonuje funkcję i cały kod.

Twój program w Kotlin musi mieć zawsze funkcję main(). Oprócz tego możesz tworzyć własne funkcje i z nich korzystać. Podobnie jak zmienne pomagają uniknąć powielania pracy, funkcje mogą pomóc Ci uniknąć wielokrotnego wpisywania tego samego kodu. Instrukcje w kodzie u góry i na dole banera są dokładnie takie same. Utwórz i użyj funkcji drukowania tych granic.

  1. W edytorze pod funkcją main() wstaw pustą linię, aby mieć miejsce na pracę. System ignoruje puste wiersze. Możesz je wstawiać w dowolnym miejscu, w którym ułatwiają porządkowanie kodu.
  2. Utwórz funkcję. Na początku umieść słowo kluczowe fun, a następnie nazwę – printBorder, parę nawiasów klamrowych () i parę nawiasów klamrowych {}, jak pokazano poniżej.
fun printBorder() {}

Kilka słów o funkcjach nazewnictwa.

  • Zwróć uwagę, że nazwa funkcji printBorder zaczyna się od małej litery i czasownika. Nazwy funkcji niemal zawsze zaczynają się od małej litery i czasownika, a nazwa powinna opisywać działanie danej funkcji. Lubisz: print() lub tutaj: printBorder().
  • Zauważ też, że drugie słowo w nazwie zaczyna się od wielkich liter. Ten styl nazywa się „wielkością wielbłądów” i ułatwia czytanie nazw. Inne przykłady nazw: drawReallyCoolFancyBorder i printBirthdayMessage.
  1. Umieść nawias klamrowy zamykający } funkcji printBorder w nowym wierszu i dodaj pusty wiersz między dwoma nawiasami klamrowymi, aby zwolnić miejsce na dodatkowy kod. Umieść nawias klamrowy zamykającego } na linii, dzięki której łatwiej zobaczysz, gdzie kończy się funkcja.
  2. Skopiuj funkcję drukowania wewnątrz ramki main() i wklej ją między nawiasami klamrowymi funkcji printBorder().

Twoja gotowa funkcja printBorder() powinna wyglądać tak.

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

Aby użyć funkcji lub ją wywołać, użyj jej nazwy w nawiasie. Zauważyliśmy, że w ten sposób korzystasz z println(). Aby użyć funkcji printBorder, wywołaj printBorder()w dowolnym miejscu w kodzie, jeśli jest to konieczne.

  1. W funkcji main() zastąp wiersze kodu, które umożliwiają wydrukowanie obramowania wokół obiektu println() za pomocą wywołań funkcji printBorder(). Gotowy kod powinien wyglądać następująco.
fun main() {
    printBorder()
    println("Happy Birthday, Jhansi!")
    printBorder()
}

fun printBorder() {
    println("=======================")
}
  1. Uruchom kod, aby sprawdzić, czy wszystko działa tak jak wcześniej.

Pamiętaj, że zmiana na kod w celu ułatwienia lub ułatwienia pracy bez zmiany danych wyjściowych nazywa się „refaktoryzacją&quot”.

Powtórz wzór obramowania

Patrząc na linię obramowania, ciągle widać ten sam symbol. Zamiast więc mówić:

"Wydrukuj 23 symbole&quo;

na przykład

"Wydrukuj 1 symbol 23 razy.

Aby to zrobić, użyj instrukcji repeat().

  1. W metodzie printBorder() użyj instrukcji repeat(), aby wydrukować znak równości 23 razy.
  2. Zamiast println(), użyj właściwości print(), aby nie skakać do nowego wiersza po wydrukowaniu każdego z nich.

Oto kod. Masz teraz jedną instrukcję, aby wydrukować równy znak. Aby powtórzyć tę instrukcję 23 razy, użyj instrukcji repeat().

fun printBorder() {
    repeat(23) {
        print("=")
    }
}
  • Instrukcja repeat() zaczyna się od słowa repeat, po którym następuje (). Ten rodzaj instrukcji określa się jako „pętlę”, ponieważ powtarzasz lub zapętlasz ten sam kod wiele razy. Później poznasz inne sposoby tworzenia pętli.
  • W nawiasach () powtarza się liczba powtórzeń.
  • a następnie nawiasy klamrowe: {},
  • wewnątrz nawiasów klamrowych {} to kod do powtórzenia.
  1. W ramach metody printBorder() po nawiasie klamrowym } instrukcji repeat(), czyli po zakończeniu drukowania linii, dodaj instrukcję println(), aby wydrukować nowy wiersz.

Twój kod powinien wyglądać mniej więcej tak.

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

Kod funkcji main() nie zmienia się i cały program powinien wyglądać tak.

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

fun printBorder() {
    repeat(23) {
        print("=")
    }
    println()
}
  1. Uruchom kod. Dane wyjściowe powinny być takie same jak wcześniej, ale tym razem udało się utworzyć obramowanie, określając symbol „"="”.
=======================
Happy Birthday, Jhansi!
=======================

Używanie argumentów do zmiany obramowania

Co się stanie, jeśli chcesz utworzyć obramowanie z innymi symbolami, takimi jak te poniżej?

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

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

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

Możesz zdefiniować osobną funkcję dla każdego z tych symboli. Jednak jest to skuteczniejsze rozwiązanie. Napisaną przez siebie funkcję możesz ponownie wykorzystać i zwiększyć jej elastyczność, dzięki czemu będzie działać z różnymi typami symboli.

Bardzo przydatną cechą funkcji jest możliwość wprowadzania danych za pomocą argumentów. Krótko zdarzyło Ci się to zobaczyć w ćwiczeniach z programowania, gdy zdarzyło Ci się zapoznać z usługą main(). W tym kroku dodasz argument do funkcji printBorder(), aby mógł wydrukować dowolny podany przez Ciebie wzorzec obramowania.

  1. W main() u góry utwórz zmienną o nazwie border dla wzorca obramowania. Spowoduje to wstrzymanie tekstu powtarzanego w przypadku obramowania.
val border = "%"
  1. Teraz przekaż tę zmienną border do obu wywołań funkcji printBorder() jako argument. Aby to zrobić, umieść border w nawiasach kwadratowych () – tak samo jak w przypadku tekstu udostępnionego przez println().

Twoja funkcja main() powinna przypominać poniższy kod.

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

Funkcja printBorder() wykorzysta wartość tego elementu border jako dane wejściowe i zorientuje się, jak wydrukować pełne obramowanie.

  1. Uruchom kod. Nie wykonywany kod. Zamiast niego widoczne są ikony błędów.

  1. W widoku Problemy pojawi się komunikat o błędzie.

Komunikat wyświetla komunikat o błędzie i wskazuje, co może być przyczyną błędu. Ważna część: Too many arguments for public fun printBorder(). Wywołujesz funkcję printBorder() i przekazujesz obramowanie jako dane wejściowe. Jednak definicja funkcji printBorder() nie akceptuje obecnie żadnych danych wejściowych.

  1. Napraw ten błąd, dodając argument obramowania do definicji funkcji printBorder(). Zobacz pierwszy wiersz kodu w sposób pokazany poniżej.
fun printBorder(border: String) {
    repeat(23) {
        print("=")
    }
    println()
}
  • Zwróć uwagę, że nazwa tego argumentu to border.
  • Po nazwie znajduje się dwukropek :
  • a słowo String, które jest opisem tego typu lub argumentu danego argumentu.

String to fragment tekstu złożony z znaków cudzysłowu. Możesz traktować go jak koraliki na sznurku, aby stworzyć naszyjnik, np. postacie umieszczone w linii, które tworzą słowa i tekst. Ustawienie argumentu String musi pomóc systemowi wymuszać stosowanie argumentów tekstowych, a nie liczbowych.

  1. Uruchom kod. Funkcja printBorder() akceptuje teraz obramowanie String. Natomiast kod w elemencie main() wywołuje funkcję printBorder(border) z argumentem border. Kod powinien działać bez błędów.
  2. Sprawdź dane wyjściowe programu w konsoli, aby zobaczyć te same granice co wcześniej.
=======================
Happy Birthday, Jhansi!
=======================

Nie jest to zamierzone. Próbowano dodać obramowanie za pomocą symbolu "%", ale program nadal drukuje obramowanie z symbolem "=". W kolejnych krokach dowiesz się, dlaczego tak się dzieje.

  1. W edytorze zobaczysz szary wykrzyknik. Ta ikona oznacza ostrzeżenie. Ostrzeżenia dotyczą problemów z kodem, którymi należy się zająć, ale nie uniemożliwiają jego działania.

  1. Przełącz się na widok problemów i przeczytaj ostrzeżenie. Komunikat "Parameter 'border' is never used." Zawiera wyjaśnienie problemu z wynikami. Przekazujesz do ciągu znaków nowy ciąg obramowania, ale nie używasz go do drukowania.
  1. Zmień funkcję printBorder(), aby korzystać z danych przekazywanych w border, zamiast drukować &"=". Działa to tak samo jak wtedy, gdy border jest zmienną zdefiniowaną przez Ciebie w ramach funkcji.
fun printBorder(border: String) {
    repeat(23) {
        print(border)
    }
    println()
}
  1. Uruchom kod ponownie. Dane wyjściowe powinny wyglądać mniej więcej tak.
%%%%%%%%%%%%%%%%%%%%%%%
Happy Birthday, Jhansi!
%%%%%%%%%%%%%%%%%%%%%%%

Doskonała robota! Oto Twój gotowy kod.

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

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

Funkcja printBorder() była znacznie bardziej elastyczna bez dodawania większej ilości kodu. Teraz możesz wydrukować obramowanie niewielkich symboli, wprowadzając niewielką zmianę.

  1. [Opcjonalnie] Jak możesz wydrukować taki baner, jeśli w funkcji main() zmienisz tylko jeden wiersz kodu?
***********************
Happy Birthday, Jhansi!
***********************
:::::::::::::::::::::::
Happy Birthday, Jhansi!
:::::::::::::::::::::::

Zmień funkcję, by miała dwa argumenty

Jeśli chcesz użyć innego wzorca, który ma więcej niż 1 znak, powiedz "`-._,-'". Nie powtarzaj tego wzorca 23 razy, ponieważ byłby zbyt długi. Możesz powtórzyć go cztery razy. Aby to osiągnąć, możesz zmienić liczbę powtórzeń w instrukcji repeat() printBorder(). Możesz jednak zrobić coś lepszego.

Bardziej rozbudowane obramowanie możesz zdefiniować na podstawie dwóch czynników:

  • Wzór do powtórzenia (wprowadzony wcześniej)
  • Liczba powtórzeń wzoru

Możesz utworzyć zmienne dla każdego z nich (wzór i liczbę powtórzeń), a następnie przekazać oba informacje do funkcji printBorder().

  1. W main() zmień obramowanie na wzór "`-._,-'".
val border = "`-._,-'"
  1. Uruchom kod i zauważ, że wzór jest teraz za długi.
  2. W main(), pod definicją border, utwórz nową zmienną o nazwie timesToRepeat dla liczby powtórzeń. Ustaw jego wartość na 4.
val timesToRepeat = 4
  1. Gdy w funkcji main() wywołujesz funkcję printBorder(), jako liczbę argumentów dodaj liczbę powtórzeń. Rozdziel je przecinkami.
printBorder(border, timesToRepeat)

Funkcja main() powinna teraz wyglądać tak:

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

Tak jak wcześniej, ten kod powoduje błąd, ponieważ masz więcej argumentów wywołania printBorder() niż w definicji printBorder().

  1. Popraw pole printBorder(), aby zaakceptować też liczbę powtórzeń jako dane wejściowe. Przecinek po argumencie, po którym następuje dodatkowy argument: timesToRepeat: Int. Pierwszy wiersz definicji funkcji wygląda teraz tak:
fun printBorder(border: String, timesToRepeat: Int) {

Uwaga:

  • Przecinek oddziela 2 argumenty.
  • timesToRepeat to nazwa argumentu.
  • z dwukropkiem : symbolem
  • i typ Int. timesToRepeat są liczbą, więc zamiast typu String musisz podać typ Int, który jest wyrażony liczbą całkowitą i jest liczbą całkowitą.
  1. W polu printBorder() zmień repeat, aby użyć argumentu timesToRepeat (zamiast liczby 23). Kod printBorder() powinien wyglądać tak.
fun printBorder(border: String, timesToRepeat: Int) {
    repeat(timesToRepeat) {
        print(border)
    }
    println()
}
  1. Uruchom kod. Dane wyjściowe wyświetlą się poniżej.
`-._,-'`-._,-'`-._,-'`-._,-'
Happy Birthday, Jhansi!
`-._,-'`-._,-'`-._,-'`-._,-'
  1. Aby te dane były idealne, na początku wiadomości z życzeniami urodzinowymi wstaw 2 spacje. Dane wyjściowe wyświetlą się poniżej.
`-._,-'`-._,-'`-._,-'`-._,-'
  Happy Birthday, Jhansi!
`-._,-'`-._,-'`-._,-'`-._,-'

Oto ostateczny kod banera:

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()
}

Gratulacje! Wykorzystując funkcje, argumenty, zmienne i powtarzającą się pętlę, poznaliśmy podstawy konstrukcji wykorzystywane w niemal wszystkich programach.

Zrób sobie przerwę, a następnie podejdź do następnego zadania, w którym stworzysz więcej funkcji i pętli, a także zdobędziesz gigantyczne ciasto z odpowiednią liczbą świec za pomocą kilku linijek programu.

W tym zadaniu zamierzasz zmodyfikować kod ciasta urodzinowego, tak aby zawsze był w odpowiednim rozmiarze i z odpowiednią liczbą świec dla osób w dowolnym wieku.

  • Możesz utworzyć trzy funkcje służące do rysowania warstwowego tortu ze świecami.
  • Użyjesz repeat() w innej kolumnie repeat(), tworząc tak zwaną &pętlę zagnieżdżoną.
  • Jak to zrobić w ten sposób, możesz stworzyć dowolny program, zaczynając od ogólnego obrazu i dodając szczegóły. Nazywa się to &"programowaniem z góry.
  • Instrukcje nie są tyle szczegółowe, jak te ćwiczenia, więc jeśli się utkniesz, możesz skorzystać z gotowego kodu.

Oto zdjęcie upieczonego ciasta:

Poniżej znajdziesz odpowiednie instrukcje.

Tworzenie funkcji głównej

  1. Zresetuj swój kod w edytorze do programu Hello, world!.
  2. Możesz usunąć argument funkcji main(), bo go nie używasz.
  3. W main() utwórz zmienną age i ustaw ją na 24.
  4. W main() utwórz drugą zmienną layers i ustaw ją na 5.
  5. W main() wywołaj funkcję printCakeCandles() i przekaż age. Może to spowodować wystąpienie błędu, ponieważ funkcja nie została jeszcze utworzona.
  6. Wywołuj też funkcję printCakeTop() i prześlij wartość age.
  7. Na koniec wywołaj funkcję printCakeBottom() i przekaż age, a także liczbę layers.
  8. Aby uniknąć błędów, dodaj // wywołania funkcji na początku każdego wiersza, jak w poniższym przykładzie. Ta metoda umożliwia przygotowanie wersji roboczej kodu bez wyświetlania błędów.
  9. Program powinien być uruchomiony bez błędów.

Twoja funkcja main() powinna przypominać poniższy kod.

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

Utwórz PrintCakeTop()

Funkcja printCakeTop() służąca do drukowania u góry tortu (wiersza równych znaków) jest niemal taka sama jak funkcja printBorder() utworzona wcześniej w tym ćwiczeniu z programowania.

==========================
  1. Poniżej funkcji main() dodaj pusty wiersz, a następnie utwórz funkcję printCakeTop() z jednym argumentem age typu Int.
  2. W środku użyj instrukcji repeat(), aby wydrukować jeden znak równości age razy 2. Dodatkowe dwa znaki równości sprawią, że świeczki nie spadną z boku tortu.
  3. Gdy skończysz, repeat() wydrukuj pusty wiersz.
  4. W funkcji main() usuń dwa symbole // na początku wiersza kodu elementu printCakeTop(), ponieważ funkcja już istnieje.
printCakeTop(age)

Oto gotowa funkcja.

fun printCakeTop(age: Int) {
    repeat(age + 2) {
        print("=")
    }
    println()
}
  1. Uruchom kod, aby zobaczyć górną część tortu.

Tworzenie funkcji PrintCakeCandles()

Każda świeca składa się z dwóch symboli. Przecinek płomienia i pionowej linii oznaczający świecę.

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

||||||||||||||||||||||||

Aby to zrobić w jednej funkcji, umieść w jednej funkcji 2 wyrażenia repeat(), jedno dla płomieni i jedno dla ciał.

  1. Poniżej funkcji main() i funkcji printCakeTop() utwórz nową funkcję printCakeCandles(), która przyjmuje jeden argument age (typ Int).
  2. Użyj wewnątrz instrukcji repeat(), aby wydrukować 1 przecinek , dla płomienia.
  3. Powtórz to age razy.
  4. Na końcu wydrukuj pusty wiersz.
  5. Dodaj instrukcję print(), aby wydrukować 1 miejsce do wstawienia świec.
  6. Powtórz te czynności, aby utworzyć drugie wyrażenie repeat() i wydrukować treść świec za pomocą pionowej linii |
  7. W kodzie main() usuń dwa symbole // na początku wiersza kodu języka printCakeCandles().
printCakeCandles(age)
  1. Uruchom kod, aby zobaczyć górną część ciasta i świec

Rozwiązanie:

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()
}

Tworzenie PrintCakeLower()

W tej funkcji rysujesz spód ciasta o szerokości takiej jak age + 2 i rysujesz go na wysokość określonej liczby warstw.

@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@
  • Oznacza to, że funkcja musi mieć 2 argumenty: 1 dla szerokości (age) i 1 dla wysokości (layers).
  • Aby wydrukować spód ciasta, powtórz czynności w sposób „'at' @” age + 2 razy, aby wydrukować jedną warstwę. Następnie drukujesz jedną warstwę layers razy.

Powtarzanie warstw rysowania

Aby utworzyć warstwę, narysuj symbol at [wiek] + 2 razy

  1. Poniżej istniejących funkcji utwórz funkcję printCakeBottom() z 2 argumentami – age i layers – oba o nazwie Int.
  2. W ramach funkcji użyj instrukcji repeat(), aby wydrukować jedną warstwę symboli (age + 2) i @ (age + 2 razy). Zakończ, drukując pustą linię, tak jak pokazano poniżej.
fun printCakeBottom(age: Int, layers: Int) {
    repeat(age + 2) {
        print("@")
    }
    println()
}
  1. Uruchom kod, aby sprawdzić, czy nadrukowuje się jeden wiersz tortu.
 ,,,,,,,,,,,,,,,,,,,,,,,,
 ||||||||||||||||||||||||
==========================
@@@@@@@@@@@@@@@@@@@@@@@@@@

Zagnieżdżone operatory powtórz()

Aby wydrukować wiele identycznych warstw tortu, możesz powiedzieć:

W warstwie 1 powtórz symbol 12 razy: @@@@@@@@@@@

W warstwie 2 powtórz raz symbol 12 razy: @@@@@@@@@@@

W warstwie 3 powtórz symbol 12 razy: @@@@@@@@@@@

Możesz też powiedzieć bardziej zwięźle:

Powtórz w przypadku trzech warstw:

Powtarzaj symbol 12 razy.

@@@@@@@@@@

@@@@@@@@@@

@@@@@@@@@@

Teraz jest to ładne rozwiązanie za pomocą instrukcji repeat(). Możesz umieścić jedno wyrażenie repeat() w innej instrukcji repeat(). Możesz więc utworzyć instrukcję repeat() w instrukcji repeat(), aby wydrukować symbol określoną liczbę razy dla określonej liczby warstw.

Zrób to w celu drukowania warstw ciasta.

  1. Umieść drugą instrukcję repeat() wokół całego kodu w funkcji. Powtórz tę pętlę layers razy.
  2. W wierszu main() usuń tylko 2 wiersze // z wiersza kodu printCakeBottom().
printCakeBottom(age, layers)
  1. Uruchom kod, aby zobaczyć cały tort.

Rozwiązanie dotyczące domeny printCakeBottom().

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

Gratulacje! Właśnie zakończyłeś dość skomplikowany program z kilkoma funkcjami i zagnieżdżoną instrukcją repeat. I to ciasto zawsze będzie mieć odpowiednią liczbę świec.

Końcowe wyniki programu powinny być:

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

Kod rozwiązania

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()
    }    
}
  • Użyj ${}, aby uwzględnić zmienne i obliczenia w tekście instrukcji drukowania. Na przykład: ${age}, gdzie age jest zmienną.
  • Utwórz zmienną, używając słowa kluczowego val i nazwy. Po ustawieniu tej wartości nie można jej zmienić. Przypisz wartość do zmiennej, używając znaku równości. Wartościami mogą być tekst i cyfry.
  • String to tekst otoczony cudzysłowami, np. "Hello".
  • Int to liczba dodatnia lub ujemna, np. 0, 23 lub -1024.
  • Możesz przekazać jeden lub więcej argumentów do funkcji, której chcesz użyć, na przykład:
    fun printCakeBottom(age:Int, layers:Int) {}
  • Użyj instrukcji repeat() {}, aby powtórzyć zestaw instrukcji kilka razy. Na przykład: repeat (23) { print('%") } lub repeat (layers) { print("@@@@@@@@@@") }
  • Pętla to instrukcja, która powtarza instrukcje wielokrotnie. Instrukcja repeat() to przykład pętli.
  • Możesz zagnieżdżać pętle, czyli umieszczać je w pętli. Możesz na przykład utworzyć instrukcję repeat() w instrukcji repeat(), aby drukować symbol kilka razy w wielu wierszach, tak jak w przypadku warstw ciasta.

Podsumowanie używania argumentów funkcji: aby użyć argumentów funkcji, musisz wykonać 3 czynności:

  • Do definicji funkcji dodaj argument i typ: printBorder(border: String)
  • Użyj argumentu w funkcji: println(border)
  • Podaj argument podczas wywoływania funkcji: printBorder(border)

Oto oficjalna dokumentacja pojęć poznanych w Kotlin podczas tego ćwiczenia z programowania.

Jeśli oparte na przeglądarce narzędzie do programowania w Kotlin nie uruchamia kodu lub wyświetla błąd, taki jak ten poniżej, możesz spróbować wykonać te czynności.

  • Odśwież stronę za pomocą polecenia SHIFT-Załaduj ponownie.
  • Zaczekaj chwilę i spróbuj ponownie.