Menu
Coddy logo textTech

復習 - 銀行口座

CoddyのKotlinジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 11/57。

challenge icon

チャレンジ

中級

BankAccount(val owner: String, opening: Int) クラスを完成させてください。その init ブロックでは、空白以外の文字を含む owner(owner is empty)と、負でない初期預金(opening must not be negative)が必要です。balance には private setter が設定されています。取引は private な MutableList に保持され、val transactions: List<String> として公開されます。deposit(amount) と withdraw(amount) は、成功すると true を返します。1 未満の金額は拒否され、残高を超える引き出しも拒否されます。成功した変更は +50 または -20 として記録されます。statement() は Ada: 30 (+50, -20) または Ada: 0 (no transactions) を返します。

提供されたコードは owner と初期預金(name,amount)を読み取り、続いて d n または w n のコマンドを読み取ります。失敗したコマンドに対して refused を出力し、最後にステートメントを出力します。無効な口座の場合はエラーメッセージを出力します。

コードは BankAccount.kt に記述してください。Main.kt には提供された入出力コードが含まれており、編集できません。

自分で試してみよう

fun main() {
    // 提供された入出力コード: そのままにしておく
    val input = generateSequence(::readLine).toList()
    try {
        val (name, amount) = input[0].split(",")
        val account = BankAccount(name, amount.toInt())
        for (cmd in input.drop(1)) {
            val (op, n) = cmd.split(" ")
            val ok = if (op == "d") account.deposit(n.toInt()) else account.withdraw(n.toInt())
            if (!ok) println("refused")
        }
        println(account.statement())
    } catch (e: IllegalArgumentException) {
        println(e.message)
    }
}

オブジェクト指向プログラミングのすべてのレッスン

自分で練習してみよう: Kotlinプレイグラウンド