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
- W przeglądarce otwórz stronę https://try.kotlinlang.org/. Otworzy się oparte na przeglądarce narzędzie do programowania w Kotlin.
- W eksploratorze plików upewnij się, że Przykłady > Witaj, świecie! Wybrano > Simplest version > SimplestVersion.kt, a edytor kodu pokazuje program
Hello world!
. - Jeśli widzisz kod z poprzednimi zmianami, nie ma problemu. Przywróć pierwotny stan programu, klikając strzałkę Cofnij obok nazwy pliku.
- W definicji
fun main()
usuń argumentargs: 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(){
- W funkcji
fun main()
zastąp tekst"Hello, world!"
tekstem"Happy Birthday, Rover!"
. - 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!")
}
- Uruchom kod.
- 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.
- W kodzie między wierszami
println()
obejmującymiHappy Birthday
iYou are already 5
dodaj te wiersze instrukcji drukowania tak jak poniżej. W ten sposób powstaje tort. Ostatnie wyrażenieprintln()
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
- Dodaj komentarz przed wydrukowaniem tortu:
// Let's print a cake!
. - 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!")
}
- Uruchom kod, a wynik powinien wyglądać jak na zrzucie ekranu poniżej.
Wiek sklepu Rover'' w zmiennej
- 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.
- W programie, jako pierwszy wiersz kodu w funkcji
main(
), dodaj poniższy kod, aby utworzyć zmienną o nazwieage
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}
- 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!")
- Uruchom kod. Obie wiadomości powinny pokazywać tę samą grupę wiekową.
- Zmień wartość zmiennej na inną. Na przykład możesz pokazywać wiek w Rover', 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
- Ponownie uruchom kod i zauważ, że obie wiadomości pokazują teraz wiek w dniach.
- [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.
- Poniżej zmiennej
age
dodaj zmienną o nazwiename
dla osoby, która ją zawiera, i ustaw jej wartość na"Rover"
.
val name = "Rover"
- 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ą.
- Dodaj
Rover
do wiadomości o wieku, korzystając ze zmiennejname
, 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
- Najedź kursorem na https://try.kotlinlang.org/ w kodzie kodu.
- Kliknij prawym przyciskiem myszy, aby otworzyć menu kontekstowe, i wybierz Zaznacz wszystko (Ctrl+A).
- Naciśnij Backspace lub Delete, aby usunąć cały kod.
- Skopiuj poniższy kod i wklej go w edytorze.
fun main() {
println("=======================")
println("Happy Birthday, Jhansi!")
println("=======================")
}
- 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.
- 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. - 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
iprintBirthdayMessage
.
- Umieść nawias klamrowy zamykający
}
funkcjiprintBorder
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. - Skopiuj funkcję drukowania wewnątrz ramki
main()
i wklej ją między nawiasami klamrowymi funkcjiprintBorder()
.
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.
- W funkcji
main()
zastąp wiersze kodu, które umożliwiają wydrukowanie obramowania wokół obiektuprintln()
za pomocą wywołań funkcjiprintBorder()
. Gotowy kod powinien wyglądać następująco.
fun main() {
printBorder()
println("Happy Birthday, Jhansi!")
printBorder()
}
fun printBorder() {
println("=======================")
}
- 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ą"”.
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()
.
- W metodzie
printBorder()
użyj instrukcjirepeat()
, aby wydrukować znak równości 23 razy. - Zamiast
println()
, użyj właściwościprint()
, 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łowarepeat
, 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.
- W ramach metody
printBorder()
po nawiasie klamrowym } instrukcjirepeat()
, 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()
}
- 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.
- W
main()
u góry utwórz zmienną o nazwieborder
dla wzorca obramowania. Spowoduje to wstrzymanie tekstu powtarzanego w przypadku obramowania.
val border = "%"
- Teraz przekaż tę zmienną
border
do obu wywołań funkcjiprintBorder()
jako argument. Aby to zrobić, umieśćborder
w nawiasach kwadratowych()
– tak samo jak w przypadku tekstu udostępnionego przezprintln()
.
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.
- Uruchom kod. Nie wykonywany kod. Zamiast niego widoczne są ikony błędów.
- 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.
- 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.
- Uruchom kod. Funkcja
printBorder()
akceptuje teraz obramowanieString
. Natomiast kod w elemenciemain()
wywołuje funkcjęprintBorder(border)
z argumentemborder
. Kod powinien działać bez błędów. - 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.
- 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.
- 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.
- Zmień funkcję
printBorder()
, aby korzystać z danych przekazywanych wborder
, zamiast drukować &"=". Działa to tak samo jak wtedy, gdyborder
jest zmienną zdefiniowaną przez Ciebie w ramach funkcji.
fun printBorder(border: String) {
repeat(23) {
print(border)
}
println()
}
- 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ę.
- [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()
.
- W
main()
zmień obramowanie na wzór"`-._,-'"
.
val border = "`-._,-'"
- Uruchom kod i zauważ, że wzór jest teraz za długi.
- W
main()
, pod definicjąborder
, utwórz nową zmienną o nazwietimesToRepeat
dla liczby powtórzeń. Ustaw jego wartość na 4.
val timesToRepeat = 4
- 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()
.
- 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 typuString
musisz podać typInt
, który jest wyrażony liczbą całkowitą i jest liczbą całkowitą.
- W polu
printBorder()
zmieńrepeat
, aby użyć argumentutimesToRepeat
(zamiast liczby 23). KodprintBorder()
powinien wyglądać tak.
fun printBorder(border: String, timesToRepeat: Int) {
repeat(timesToRepeat) {
print(border)
}
println()
}
- Uruchom kod. Dane wyjściowe wyświetlą się poniżej.
`-._,-'`-._,-'`-._,-'`-._,-' Happy Birthday, Jhansi! `-._,-'`-._,-'`-._,-'`-._,-'
- 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 kolumnierepeat()
, 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
- Zresetuj swój kod w edytorze do programu
Hello, world!
. - Możesz usunąć argument funkcji
main()
, bo go nie używasz. - W
main()
utwórz zmiennąage
i ustaw ją na 24. - W
main()
utwórz drugą zmiennąlayers
i ustaw ją na 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. - Wywołuj też funkcję
printCakeTop()
i prześlij wartośćage
. - Na koniec wywołaj funkcję
printCakeBottom()
i przekażage
, a także liczbęlayers
. - 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. - 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.
==========================
- Poniżej funkcji
main()
dodaj pusty wiersz, a następnie utwórz funkcjęprintCakeTop()
z jednym argumentemage
typuInt
. - W środku użyj instrukcji
repeat()
, aby wydrukować jeden znak równościage
razy 2. Dodatkowe dwa znaki równości sprawią, że świeczki nie spadną z boku tortu. - Gdy skończysz,
repeat()
wydrukuj pusty wiersz. - W funkcji
main()
usuń dwa symbole//
na początku wiersza kodu elementuprintCakeTop()
, ponieważ funkcja już istnieje.
printCakeTop(age)
Oto gotowa funkcja.
fun printCakeTop(age: Int) {
repeat(age + 2) {
print("=")
}
println()
}
- 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ł.
- Poniżej funkcji
main()
i funkcjiprintCakeTop()
utwórz nową funkcjęprintCakeCandles()
, która przyjmuje jeden argumentage
(typInt
). - Użyj wewnątrz instrukcji
repeat()
, aby wydrukować 1 przecinek,
dla płomienia. - Powtórz to
age
razy. - Na końcu wydrukuj pusty wiersz.
- Dodaj instrukcję
print()
, aby wydrukować 1 miejsce do wstawienia świec. - Powtórz te czynności, aby utworzyć drugie wyrażenie
repeat()
i wydrukować treść świec za pomocą pionowej linii | - W kodzie
main()
usuń dwa symbole//
na początku wiersza kodu językaprintCakeCandles()
.
printCakeCandles(age)
- 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
- Poniżej istniejących funkcji utwórz funkcję
printCakeBottom()
z 2 argumentami –age
ilayers
– oba o nazwieInt
. - 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()
}
- 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.
- Umieść drugą instrukcję
repeat()
wokół całego kodu w funkcji. Powtórz tę pętlęlayers
razy. - W wierszu
main()
usuń tylko 2 wiersze//
z wiersza koduprintCakeBottom()
.
printCakeBottom(age, layers)
- 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}
, gdzieage
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('%") }
lubrepeat (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 instrukcjirepeat()
, 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.