Menu
CoddyTech

Ôn tập: thẻ thư viện

Thuộc phần Lập trình hướng đối tượng trong hành trình Kotlin của Coddy. Bài học 6 trên 57.

challenge icon

Thử thách

Trung bình

Khai báo lớp LibraryCard(val name: String, val limit: Int = 3). Khối init yêu cầu tên không được để trống (name is empty) và giới hạn ít nhất là 1 (limit must be positive). Lớp này lưu danh sách các tên sách đã mượn. borrow(title) trả về true và thêm tên sách, trừ khi thẻ đã đạt giới hạn hoặc đã có tên sách đó. giveBack(title) trả về true khi xóa tên sách. status() trả về Ada: 2/3 (Dune, Emma) theo thứ tự mượn, hoặc Ada: 0/3 khi chưa mượn sách nào.

Code được cung cấp đọc tên, giới hạn (hoặc một dòng trống để dùng giá trị mặc định), sau đó là các lệnh +title hoặc -title. Code in ra ok hoặc no cho mỗi lệnh, cuối cùng in ra status(); nếu thẻ không hợp lệ, code sẽ in thông báo lỗi.

Đặt code của bạn trong LibraryCard.kt. Main.kt chứa code đầu vào/đầu ra được cung cấp và bạn không thể chỉnh sửa tệp này.

Tự làm thử

fun main() {
    // Đoạn code đầu vào/đầu ra có sẵn: giữ nguyên
    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)
    }
}

Tất cả bài học trong Lập trình hướng đối tượng

Tự luyện tập: Playground Kotlin