Menu
Coddy logo textTech

Повторение — читательский билет

Часть раздела Объектно-ориентированное программирование путешествия по Kotlin на Coddy. Урок 6 из 57.

challenge icon

Задание

Средне

Объявите класс LibraryCard(val name: String, val limit: Int = 3). Его блок init требует непустого имени (name is empty) и ограничения не менее 1 (limit must be positive). Он хранит список взятых названий. borrow(title) возвращает true и добавляет название, если только формуляр не достиг своего ограничения и это название ещё не было в нём. giveBack(title) возвращает true, если название было удалено. status() возвращает Ada: 2/3 (Dune, Emma) в порядке взятия книг или Ada: 0/3, если ничего не взято.

Предоставленный код считывает имя, ограничение (или пустую строку для значения по умолчанию), а затем команды +title или -title. Для каждой команды он выводит ok или no, а в конце — status(); для недействительной карточки вместо этого выводится сообщение об ошибке.

Ваш код должен находиться в LibraryCard.kt. В Main.kt содержится предоставленный код ввода/вывода, и его нельзя изменять.

Попробуйте сами

fun main() {
    // Поставляемый код ввода/вывода: оставьте его как есть
    val input = generateSequence(::readLine).toList()
    try {
        val card = if (input[1].isEmpty()) LibraryCard(input[0]) else LibraryCard(input[0], input[1].toInt())
        for (cmd in input.drop(2)) {
            val title = cmd.drop(1)
            val done = if (cmd.startsWith("+")) card.borrow(title) else card.giveBack(title)
            println(if (done) "ok" else "no")
        }
        println(card.status())
    } catch (e: IllegalArgumentException) {
        println(e.message)
    }
}

Все уроки раздела Объектно-ориентированное программирование

Потренируйтесь самостоятельно: Песочница Kotlin