Menu
Coddy logo textTech

復習 - 図書館カード

CoddyのKotlinジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 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プレイグラウンド