Menu
CoddyTech

回顾:图书证

本课属于 Coddy Kotlin 学习旅程的“面向对象编程”单元。第 6 课,共 57 课。

challenge icon

挑战

中等

声明类 LibraryCard(val name: String, val limit: Int = 3)。它的 init 代码块要求 name 非空白(name is empty),且 limit 至少为 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 在线编辑器