В этой лаборатории кода вы создадите короткую программу на Kotlin, которая печатает сообщение о дне рождения с тортом и баннером ко дню рождения.
Предпосылки
- Как открывать и редактировать код в https://try.kotlinlang.org/ , браузерном инструменте программирования Kotlin.
- Поймите
"Hello world!"
из лаборатории кода «Напишите свою первую программу на Kotlin». - Как использовать
println()
для записи текста в консоль онлайн-редактора кода Kotlin.
Чему вы научитесь
- Как напечатать более сложный текст из вашей программы.
- Как выполнять базовые вычисления в Kotlin и сохранять результаты в переменных для последующего использования.
- Как создать функцию для вывода одной и той же строки несколько раз.
- Как создать цикл, который печатает фрагмент текста несколько раз.
Что вы будете строить
- Вы создадите короткую программу, которую сможете использовать для печати сообщений о дне рождения, текстового изображения торта и баннера.
Что вам нужно
- Компьютер с доступом в Интернет и современный веб-браузер, например, последняя версия Chrome .
Настройте свой стартовый код
- В браузере откройте https://try.kotlinlang.org/ . Откроется браузерный инструмент программирования Kotlin.
- В проводнике убедитесь, что Примеры > Привет, мир! > Самая простая версия > Выбирается SimplestVersion.kt , и редактор кода показывает
Hello world!
программа. - Если вы видите код с вашими предыдущими изменениями, это нормально. Восстановите исходное состояние программы, щелкнув стрелку «Отменить » рядом с именем файла.
- В определении
fun main()
удалите аргументargs: Array<String>
, потому что вы не собираетесь его использовать. Он предусмотрен в коде, указанном по умолчанию в редакторе, но не является обязательным. Первая строка вашей программы теперь должна выглядеть так, как показано ниже.
fun main(){
- Внутри
fun main()
замените"Hello, world!"
текст с надписью"Happy Birthday, Rover!"
. - Ниже этого, все еще внутри фигурных скобок, добавьте еще две строки для печати:
"You are already 5!"
и"5 is the very best age to celebrate!".
Ваш готовый код должен выглядеть так.
fun main() {
println("Happy Birthday, Rover!")
println("You are already 5!")
println("5 is the very best age to celebrate!")
}
- Запустите свой код.
- Убедитесь, что на вкладке « Консоль » отображается «С днем рождения, Ровер!» а ниже Вам уже 5! а 5 лет - лучший возраст для праздника!
Добавить праздничный торт
Поздравлению с днем рождения нужна тематическая картинка. Типа, торт. Вы можете добавить торт к своему сообщению о дне рождения, напечатав дополнительные строки, которые используют буквы и символы на вашей клавиатуре и println()
.
Продолжайте с кода решения выше.
- В своем коде, между двумя операторами
println()
дляHappy Birthday
иYou are already 5
добавьте следующие строки операторов печати, как показано ниже. Это создает торт. В последнем оператореprintln()
нет текста между кавычками, поэтому печатается пустая строка.
println(" ,,,,, ")
println(" ||||| ")
println(" =========")
println("@@@@@@@@@@@")
println("{~@~@~@~@~}")
println("@@@@@@@@@@@")
println("")
Чтобы помочь другим понять ваш код, вы можете добавить комментарий перед печатью торта. Если вы запустите свой код, вывод не будет выглядеть иначе, потому что комментарии — это просто информация для вас и других разработчиков, а не команды для системы. Встроенный комментарий начинается с //
, за которым следует текст, как показано ниже.
// This is a comment line
// This is another comment
- Добавьте комментарий перед печатью торта:
// Let's print a cake!
. - Добавьте комментарий перед печатью пустой строки:
// This prints an empty line
.
Ваш код должен выглядеть так, как показано ниже.
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!")
}
- Запустите свой код, и результат должен выглядеть так, как показано на скриншоте ниже.
Сохранить возраст Ровера в переменной
- Обратите внимание, что в готовом коде вы дважды повторяете одно и то же число возраста.
Вместо того, чтобы повторять это число, вы можете сохранить его в одном месте как переменную. Это как положить свой номер в коробку и дать ему имя. Затем вы можете использовать это имя переменной в любое время, когда вам нужно значение. И, если возраст меняется, вам нужно изменить свою программу только в одном месте. При изменении переменной правильное значение возраста печатается везде, где используется переменная.
- В вашей программе в качестве первой строки кода внутри функции
main(
) добавьте следующий код для создания переменнойage
со значением 5, как показано ниже. (Вы должны поместить эту строку перед операторамиprintln()
).
val age = 5
Эта строка означает:
-
val
— это специальное слово, используемое Kotlin, называемое ключевым словом , указывающее, что следующее за ним имя переменной. -
age
— это имя переменной. -
=
делает значениеage
(слева) таким же, как значение справа. В математике один знак равенства используется, чтобы утверждать, что значения на каждой стороне одинаковы. В Kotlin, в отличие от математики, используется один знак равенства для присвоения значения справа именованной переменной слева.
Разработчик сказал бы это так: в этой строке объявляется переменная с именем age
, присвоенное значение которой равно 5
.
Чтобы использовать переменную внутри оператора печати, вам нужно окружить ее некоторыми символами, которые сообщают системе, что дальше идет не текст, а переменная. Вместо того, чтобы печатать текст, система должна напечатать значение переменной. Вы делаете это, помещая свою переменную в фигурные скобки, которым предшествует знак доллара, как в примере ниже.
${variable}
- В своем коде замените цифру 5 в обоих операторах печати на переменную
age
, как показано ниже.
println("You are already ${age}!")
println("${age} is the very best age to celebrate!")
- Запустите свой код, и оба сообщения должны показывать один и тот же возраст.
- Измените значение переменной на другое. Например, вы можете указать возраст Ровера в днях, а не в годах. Для этого умножьте возраст на 365, опуская високосные годы. Вы можете сделать этот расчет прямо при создании переменной, как показано ниже.
val age = 5 * 365
- Запустите свой код еще раз и обратите внимание, что оба сообщения теперь показывают возраст в днях.
- [Необязательно] Измените текст сообщений печати, чтобы лучше работать с днями. Например, измените их так, чтобы они читались так:
You are already 1825 days old!
1825 days old is the very best age to celebrate!
Поместить текст в переменную
В переменные можно помещать не только числа, но и текст.
- Под переменной
age
добавьте переменную сname
для имени именинника и установите для нее значение"Rover"
.
val name = "Rover"
- Замените имя
Rover
в сообщении о дне рождения переменной, как показано ниже.
println("Happy Birthday, ${name}!")
И вы можете иметь более одной переменной в операторе печати.
- Добавьте
Rover
к сообщению о возрасте, используя переменнуюname
, как показано ниже.
println("You are already ${age} days old, ${name}!")
Ваш завершенный код должен выглядеть примерно так.
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!")
}
Поздравляем! Теперь вы можете создавать сообщения с текстом, графику, созданную из символов, использовать переменные для хранения чисел и текста и печатать текст с использованием переменных.
В этом задании вы создадите баннер дня рождения, а затем узнаете, как упростить этот код, используя приемы повторения и повторного использования кода, и почему это хорошо.
Создайте стартовый баннер ко дню рождения
- В https://try.kotlinlang.org/ поместите курсор где-нибудь внутри кода.
- Щелкните правой кнопкой мыши, чтобы открыть контекстное меню, и выберите « Выделить все» (Ctrl-A) .
- Нажмите клавишу возврата или удаления, чтобы удалить весь код.
- Скопируйте и вставьте код ниже в редактор.
fun main() {
println("=======================")
println("Happy Birthday, Jhansi!")
println("=======================")
}
- Запустите вашу программу, чтобы увидеть баннер, напечатанный в консоли.
======================= Happy Birthday, Jhansi! =======================
Создайте функцию для печати границы
Код, который вы только что вставили и запустили, представляет собой функцию с именем main()
, содержащую три оператора печати. Когда вы нажимаете кнопку « Выполнить» , система выполняет функцию и весь код внутри нее.
Ваша программа на Kotlin всегда должна иметь функцию main()
. Кроме того, вы можете создавать и использовать собственные функции. Точно так же, как переменные помогают вам избежать дублирования работы, функции могут помочь вам избежать многократного написания одного и того же кода. В вашем коде операторы печати для верхней и нижней части баннера абсолютно одинаковы. Давайте создадим и используем функцию для печати этих границ.
- В редакторе под функцией
main()
вставьте пустую строку, просто чтобы дать вам немного места для работы. Система игнорирует пустые строки, и вы можете вставлять их везде, где это полезно для организации вашего кода. - Создайте функцию. Начните с ключевого слова
fun
, за которым следует имя,printBorder
, пара скобок()
и пара фигурных скобок{}
, как показано ниже.
fun printBorder() {}
Несколько слов об именах функций.
- Обратите внимание, что имя функции
printBorder
начинается со строчной буквы и глагола. Имена функций почти всегда начинаются со строчной буквы и глагола, и имя должно описывать, что делает функция. Например:print()
или здесьprintBorder()
. - Обратите также внимание, что второе слово внутри имени начинается с прописной буквы. Этот стиль называется «верблюжий регистр» и упрощает чтение имен. Еще несколько примеров имен:
drawReallyCoolFancyBorder
иprintBirthdayMessage
.
- Поместите закрывающую скобку
}
функцииprintBorder
в новую строку и добавьте пустую строку между двумя фигурными скобками, чтобы у вас было место для добавления дополнительного кода. Наличие закрывающей фигурной скобки } в отдельной строке облегчает просмотр того, где заканчивается функция. - Внутри функции
main()
скопируйте оператор печати для границы и вставьте его между фигурными скобками функцииprintBorder()
.
Ваша готовая printBorder()
должна выглядеть так.
fun printBorder() {
println("=======================")
}
Чтобы использовать или вызвать функцию, используйте ее имя в скобках. Обратите внимание, что именно так вы использовали println()
! Итак, чтобы использовать функцию printBorder
, вызовите printBorder()
в любом месте вашего кода, где вам нужно.
- В функции
main()
замените строки кода, выводящие линию границы с помощьюprintln()
, на вызовы функцииprintBorder()
. Ваш готовый код должен выглядеть так.
fun main() {
printBorder()
println("Happy Birthday, Jhansi!")
printBorder()
}
fun printBorder() {
println("=======================")
}
- Запустите свой код, чтобы убедиться, что все работает как прежде.
Обратите внимание, что изменение кода, чтобы сделать его лучше или проще для работы без изменения вывода, называется « рефакторингом ».
Повторите узор границы
Глядя на пограничную линию, это действительно один и тот же символ снова и снова. Итак, вместо того, чтобы сказать:
"Выведите эту строку из 23 символов"
ты мог бы сказать,
«Напечатайте этот 1 символ 23 раза».
В коде вы делаете это с помощью инструкции repeat()
.
- В
printBorder()
используйте операторrepeat()
, чтобы напечатать знак равенства 23 раза. - Вместо использования
println()
используйтеprint()
, чтобы не переходить на новую строку после печати каждого "=".
Вот код. Теперь у вас есть единственная инструкция для печати знака равенства, а чтобы повторить эту инструкцию 23 раза, вы используете оператор repeat()
.
fun printBorder() {
repeat(23) {
print("=")
}
}
- Оператор
repeat()
начинается со словаrepeat
, за которым следует()
. Этот тип оператора называется «циклом», потому что вы повторяете или зацикливаете один и тот же код несколько раз. О других способах создания петель вы узнаете позже. - В скобках
()
указано количество повторений, - затем фигурные скобки
{},
- а внутри фигурных скобок
{}
находится повторяющийся код.
- В
printBorder()
после закрывающей фигурной скобки } оператораrepeat()
, то есть после завершения печати линии границы, добавьте операторprintln()
для печати новой строки.
Теперь ваш код должен быть таким.
fun printBorder() {
repeat(23) {
print("=")
}
println()
}
Код в функции main()
не меняется, и вся ваша программа должна выглядеть так.=
fun main() {
printBorder()
println("Happy Birthday, Jhansi!")
printBorder()
}
fun printBorder() {
repeat(23) {
print("=")
}
println()
}
- Запустите свой код. Вывод должен быть таким же, как и раньше, но на этот раз вы смогли создать границу, указав символ «=» только один раз!
======================= Happy Birthday, Jhansi! =======================
Используйте аргументы, чтобы изменить границу
Что, если вы хотите создать границы, которые используют разные символы, такие как приведенные ниже?
%%%%%%%%%%%%%%%%%%%%%%%%%%
******************************************************* **
:::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::
Вы можете определить отдельную функцию для каждого из этих различных символов. Однако есть более эффективный способ сделать это. Вы можете повторно использовать уже написанную функцию и сделать ее более гибкой, чтобы она работала для разных типов символов.
Отличительной чертой функций является то, что вы можете вводить в них данные, используя аргументы. Вы ненадолго столкнулись с этим в предыдущей кодовой лаборатории, когда познакомились с main()
. На этом шаге вы добавите аргумент в printBorder()
, чтобы она могла печатать любой предоставленный вами шаблон границы.
- В
main()
вверху создайте переменную с именемborder
для шаблона границы. Это будет содержать текст, который будет повторяться для границы.
val border = "%"
- Теперь передайте эту переменную
border
в оба вызова функцииprintBorder()
в качестве аргумента. Вы делаете это, помещаяborder
в круглые скобки()
, точно так же, как когда вы вводили текст дляprintln()
для печати.
Ваша функция main()
должна выглядеть так, как показано ниже.
fun main() {
val border = "%"
printBorder(border)
println("Happy Birthday, Jhansi!")
printBorder(border)
}
Функция printBorder()
будет принимать значение этой border
в качестве входных данных и выяснять, как распечатать полную границу.
- Запустите свой код. Ваш код не выполняется, и вместо этого вы видите значки ошибок рядом с вашим кодом.
- Посмотрите на представление « Проблемы » и увидите сообщение об ошибке.
Как и раньше, в сообщении указывается, где находится ошибка, и дается подсказка, что это может быть. Важная часть: Too many arguments for public fun printBorder()
. Вы вызываете printBorder()
и передаете границу в качестве входных данных. Однако определение функции printBorder()
в данный момент не принимает никаких входных данных.
- Исправьте эту ошибку, добавив аргумент границы в определение функции
printBorder()
. См. первую строку кода, как показано ниже.
fun printBorder(border: String) {
repeat(23) {
print("=")
}
println()
}
- Обратите внимание, что имя аргумента —
border
. - После имени ставится двоеточие
:
- и слово
String
, которое является описанием типа аргумента.
String
— это фрагмент текста, состоящий из символов, заключенных в кавычки. Вы можете думать об этом как о бусинах, выстроенных в линию, чтобы сформировать ожерелье, как символы, выстроенные в линию, чтобы сформировать слова и текст. Указание того, что аргумент должен быть String
, помогает системе обеспечить, чтобы ваш аргумент был текстом, а не, например, числом.
- Запустите свой код. Функция
printBorder()
теперь принимает в качестве входных данныхString
границы. И код вmain()
вызываетprintBorder(border)
сborder
в качестве аргумента. Ваш код должен работать без ошибок. - Посмотрите на вывод вашей программы в консоли , и она все еще показывает ту же границу, что и раньше?
======================= Happy Birthday, Jhansi! =======================
Это не предполагаемое поведение! Вы попытались сделать рамку с символом "%", но программа все еще печатает рамку с символом "=". На следующих шагах вы узнаете, почему это происходит.
- В редакторе обратите внимание на серый восклицательный знак. Этот значок указывает на предупреждение. Предупреждения — это проблемы с вашим кодом, на которые вам нужно обратить внимание, но они не мешают вашему коду работать.
- Переключитесь на представление « Проблемы» и прочитайте предупреждение. Пишет:
"Parameter 'border' is never used."
Это предупреждение объясняет проблему с выводом. Вы передаете в функцию новую строку для границы, но не используете ее для печати.
- Измените
printBorder()
, чтобы использовать переданнуюborder
вместо печати "=". Это работает точно так же, как если быborder
была переменной, которую вы определили внутри функции!
fun printBorder(border: String) {
repeat(23) {
print(border)
}
println()
}
- Запустите свой код еще раз. Вывод должен выглядеть так, как показано ниже.
%%%%%%%%%%%%%%%%%%%%%%% Happy Birthday, Jhansi! %%%%%%%%%%%%%%%%%%%%%%%
Отличная работа, вы решили проблему! Вот ваш готовый код.
fun main() {
val border = "%"
printBorder(border)
println("Happy Birthday, Jhansi!")
printBorder(border)
}
fun printBorder(border: String) {
repeat(23) {
print(border)
}
println()
}
Вы сделали printBorder()
намного более гибкой, не добавляя много кода. Теперь вы можете напечатать рамку из разных символов с небольшим изменением.
- [Необязательно] Изменив всего одну строку кода в функции
main()
, как бы вы напечатали такие баннеры ко дню рождения?
*********************** Happy Birthday, Jhansi! ***********************
::::::::::::::::::::::: Happy Birthday, Jhansi! :::::::::::::::::::::::
Измените функцию, чтобы она имела два аргумента
Что делать, если вы хотите использовать другой шаблон, длина которого превышает 1 символ, скажем, "`-._,-'"
. Вы не стали бы повторять этот шаблон 23 раза, так как это было бы слишком долго. Вы могли бы повторить это, может быть, 4 раза. Для этого вы можете изменить количество повторений в операторе repeat()
функции printBorder()
. Тем не менее, вы можете сделать что-то лучше!
Вы можете определить более красивую границу на основе двух вещей:
- Шаблон для повторения (который вы уже сделали)
- Количество раз, которое вы хотите повторить шаблон
Вы можете создать переменные для каждого шаблона и количества повторений, а затем передать обе части информации в printBorder()
.
- В
main()
измените границу на"`-._,-'"
.
val border = "`-._,-'"
- Запустите свой код и обратите внимание, что шаблон стал слишком длинным.
- В
main()
под определениемborder
создайте новую переменную с именемtimesToRepeat
для количества повторений. Установите его значение на 4.
val timesToRepeat = 4
- В
main()
при вызовеprintBorder()
добавьте количество повторений в качестве второго аргумента. Разделите два аргумента запятой.
printBorder(border, timesToRepeat)
Теперь функция main()
должна выглядеть так:
fun main() {
val border = "`-._,-'"
val timesToRepeat = 4
printBorder(border, timesToRepeat)
println("Happy Birthday, Jhansi!")
printBorder(border, timesToRepeat)
}
Как и прежде, этот код выдает ошибку, потому что у вас больше аргументов, вызывающих printBorder()
, чем в определении printBorder()
.
- Исправьте
printBorder()
, чтобы она также принимала количество повторений в качестве входных данных. Добавьте запятую после аргумента, а затем дополнительный аргумент:timesToRepeat: Int.
Первая строка определения вашей функции теперь выглядит так, как показано ниже.
fun printBorder(border: String, timesToRepeat: Int) {
Уведомление:
- Запятая разделяет два аргумента.
-
timesToRepeat
— имя аргумента, - с последующим двоеточием: символ,
- и тип:
Int. timesToRepeat
— это число, поэтому вместо того, чтобы делать его типаString
, вам нужно сделать его типаInt
, что является сокращением от целого числа, целого числа.
- Внутри
printBorder()
изменитеrepeat
, чтобы использовать аргументtimesToRepeat
(вместо числа 23). ВашprintBorder()
должен выглядеть так.
fun printBorder(border: String, timesToRepeat: Int) {
repeat(timesToRepeat) {
print(border)
}
println()
}
- Запустите свой код. И вывод выглядит так, как показано ниже.
`-._,-'`-._,-'`-._,-'`-._,-' Happy Birthday, Jhansi! `-._,-'`-._,-'`-._,-'`-._,-'
- Чтобы сделать вывод идеальным, вставьте два пробела в начале сообщения «С днем рождения». Тогда ваш вывод будет таким, как показано ниже.
`-._,-'`-._,-'`-._,-'`-._,-' Happy Birthday, Jhansi! `-._,-'`-._,-'`-._,-'`-._,-'
Вот окончательный код для вашего баннера:
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()
}
Поздравляем! С функциями, аргументами, переменными и повторяющимся циклом вы изучили основные строительные блоки, которые используются почти во всех программах.
Сделайте перерыв, а затем займитесь следующей задачей ниже, где вы создадите больше функций и циклов, и вы получите возможность построить гигантский торт с нужным количеством свечей всего за несколько строк программирования.
В этом задании вы собираетесь обновить код праздничного торта, чтобы он всегда был нужного размера с нужным количеством свечей для любого возраста.
- Всего вы создадите три функции для рисования слоеного пирога со свечами.
- Вы будете использовать
repeat()
внутри другогоrepeat()
, создавая так называемый «вложенный цикл». - То, как вы создадите этот код, — это то, как вы можете создать любую программу, начиная с общей картины и добавляя детали. Это называется «развитие сверху вниз».
- Инструкции для этой практики не такие подробные, и вы можете обратиться к готовому коду, если застряли.
Вот фото торта, который вы будете печь:
А вот инструкции.
Создайте основную функцию
- Сбросьте свой код в редакторе на
Hello, world!
программа. - Вы можете удалить аргумент
main()
, потому что вы не будете его использовать. - В
main()
создайте переменнуюage
и установите для нее значение 24. - В
main()
создайте второйlayers
переменной и установите для него значение 5. - В
main()
вызовите функциюprintCakeCandles()
и передайтеage
. Это оставит вас с ошибкой, потому что вы еще не создали эту функцию. - Точно так же вызовите функцию
printCakeTop()
и также передайтеage
. - Наконец, вызовите функцию
printCakeBottom()
и передайтеage
, а также количествоlayers
. - Чтобы избавиться от ошибок, закомментируйте три вызова функций, добавив
//
в начале каждой строки, как показано ниже. Этот метод позволяет вам набросать код, не вызывая ошибок. - Запустите вашу программу, и она не должна иметь ошибок и ничего не делать.
Ваша функция main()
должна выглядеть так, как показано ниже.
fun main() {
val age = 24
val layers = 5
// printCakeCandles(age)
// printCakeTop(age)
// printCakeBottom(age, layers)
}
Создать printCakeTop()
Функция printCakeTop()
для печати верхней части торта, строки из знаков равенства, почти такая же, как и printBorder()
, которую вы создали ранее в этой лабораторной работе.
==========================
- Под функцией
main()
добавьте пустую строку, а затем создайте функциюprintCakeTop()
, которая принимает один аргументage
типаInt
. - Внутри используйте оператор
repeat()
для вывода одного знака равенстваage
, умноженного на 2. Два дополнительных знака равенства нужны для того, чтобы свечи не падали с торта. - В конце, когда
repeat()
будет выполнено, напечатайте пустую строку. - В
main()
удалите два символа//
из начала строки кода дляprintCakeTop()
, потому что функция теперь существует.
printCakeTop(age)
Вот ваша готовая функция.
fun printCakeTop(age: Int) {
repeat(age + 2) {
print("=")
}
println()
}
- Запустите свой код, чтобы увидеть вершину пирога.
Создать printCakeCandles()
Каждая свеча состоит из двух символов. Запятая для пламени и вертикальная черта | для тела свечи.
,,,,,,,,,,,,,,,,,,,,,,,,
||||||||||||||||||||||||
Чтобы выполнить это в одной функции, поместите в свою функцию два оператора repeat()
, один для пламени и один для тел.
- Ниже функций
main()
иprintCakeTop()
создайте новую функциюprintCakeCandles()
, которая принимает один аргументage
типаInt
. - Внутри используйте оператор
repeat()
, чтобы напечатать одну запятую,
пламени. - Повторите этот
age
раз. - В конце выведите пустую строку.
- Добавьте оператор
print()
, чтобы напечатать один пробел для вставки свечей. - Ниже повторите шаги, чтобы создать второй оператор
repeat()
для печати тел свечей с вертикальной линией |. - В
main()
удалите два символа//
из начала строки кода дляprintCakeCandles()
.
printCakeCandles(age)
- Запустите свой код, чтобы увидеть верхнюю часть торта и свечи
Решение:
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()
}
Создать printCakeBottom()
В этой функции вы рисуете дно торта шириной, равной age + 2
, и вы рисуете его для высоты заданного количества слоев.
@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@
- Это означает, что вашей функции нужны два аргумента: один для ширины (
age
) и один для высоты (layers
). - Чтобы распечатать дно торта, вы сначала повторяете символ 'at' @
age + 2
раза, чтобы напечатать один слой. Затем вы повторяете печать одногоlayers
раз.
Повторить слои рисования
Нарисуйте возраст символа+2 раза, чтобы создать слой
- Под существующими функциями создайте функцию
printCakeBottom()
с двумя аргументами,age
layers
, оба типаInt
. - Внутри функции используйте оператор
repeat()
, чтобы напечатать один слой символов 'at'@
age + 2
раза. Завершите, напечатав пустую строку, как показано ниже.
fun printCakeBottom(age: Int, layers: Int) {
repeat(age + 2) {
print("@")
}
println()
}
- Запустите свой код, чтобы убедиться, что он печатает одну строку дна торта.
,,,,,,,,,,,,,,,,,,,,,,,, |||||||||||||||||||||||| ========================== @@@@@@@@@@@@@@@@@@@@@@@@@@
Вложенные операторы Repeat()
Чтобы напечатать несколько одинаковых слоев дна торта, вы можете сказать:
Для слоя 1 повторите символ 12 раз: @@@@@@@@@@@@
Для слоя 2 повторите символ 12 раз: @@@@@@@@@@@@
Для слоя 3 повторите символ 12 раз: @@@@@@@@@@@@
Или вы можете сказать это гораздо более кратко, как:
Повторите для трех слоев:
Повторите символ 12 раз.
@@@@@@@@@@@@@
@@@@@@@@@@@@@
@@@@@@@@@@@@@
Теперь это то, что вы можете сделать с операторами repeat()
. Вы можете поместить один оператор repeat()
в другой оператор repeat()
. Таким образом, вы можете создать оператор repeat()
внутри оператора repeat()
, чтобы печатать символ определенное количество раз для определенного количества слоев.
Давайте сделаем это для печати слоев торта.
- Поместите второй оператор
repeat()
вокруг всего кода внутри функции. Повторите этуlayers
раз. - В
main()
удалите только два//
из строки кода дляprintCakeBottom()
.
printCakeBottom(age, layers)
- Запустите свой код, чтобы увидеть весь торт.
Решение для printCakeBottom()
.
fun printCakeBottom(age: Int, layers: Int) {
repeat(layers) {
repeat(age + 2) {
print("@")
}
println()
}
}
Поздравляем! Вы только что закончили довольно сложную программу с несколькими функциями и вложенным оператором repeat
. И на вашем торте всегда будет нужное количество свечей!
Окончательный вывод вашей программы должен быть:
,,,,,,,,,,,,,,,,,,,,,,,, |||||||||||||||||||||||| ========================== @@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@
Код решения
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()
}
}
- Используйте
${}
, чтобы окружить переменные и вычисления в тексте операторов печати. Например:${age}
, гдеage
— это переменная. - Создайте переменную, используя ключевое слово
val
и имя. После установки это значение не может быть изменено. Присвойте значение переменной, используя знак равенства. Примерами значений являются текст и числа. -
String
— это текст, заключенный в кавычки, например"Hello"
. -
Int
— это целое положительное или отрицательное число, например 0, 23 или -1024. - Вы можете передать один или несколько аргументов функции для использования, например:
fun printCakeBottom(age:Int, layers:Int) {}
- Используйте оператор
repeat() {}
, чтобы повторить набор инструкций несколько раз. Например:repeat (23) { print('%") }
илиrepeat (layers) { print("@@@@@@@@@@") }
- Цикл — это инструкция многократного повторения инструкций. Оператор
repeat()
является примером цикла. - Вы можете вкладывать циклы, то есть помещать циклы в циклы. Например, вы можете создать оператор
repeat()
внутри оператораrepeat()
, чтобы печатать символ несколько раз для ряда строк, как вы сделали для слоев торта.
Резюме использования аргументов функции: Чтобы использовать аргументы с функцией, вам нужно сделать три вещи:
- Добавьте аргумент и тип в определение функции:
printBorder(border: String)
- Используйте аргумент внутри функции:
println(border)
- Укажите аргумент при вызове функции:
printBorder(border)
Вот официальная документация по концепциям Kotlin, которые вы изучили в этой лаборатории кода.
Если браузерный инструмент программирования Kotlin не выполняет ваш код или выдает ошибку, подобную приведенной ниже, вы можете попробовать следующее.
- Перезагрузите страницу с помощью SHIFT-Reload.
- Подождите минуту, а затем повторите попытку.