Repaso: cuenta bancaria
Parte de la sección Programación orientada a objetos del Journey de Kotlin de Coddy. Lección 11 de 57.
Desafío
IntermedioCompleta la clase BankAccount(val owner: String, opening: Int). Su bloque init requiere un propietario que no esté en blanco (owner is empty) y un depósito inicial no negativo (opening must not be negative). balance tiene un setter privado. Las transacciones se almacenan en una MutableList privada y se exponen como val transactions: List<String>. deposit(amount) y withdraw(amount) devuelven true si tienen éxito: se rechazan las cantidades inferiores a 1 y se rechaza un retiro superior al saldo; los cambios realizados correctamente se registran como +50 o -20. statement() devuelve Ada: 30 (+50, -20) o Ada: 0 (no transactions).
El código proporcionado lee el propietario y el depósito inicial (name,amount), después los comandos d n o w n. Imprime refused para los comandos fallidos y, finalmente, el estado de la cuenta; si la cuenta no es válida, imprime el mensaje de error.
Tu código debe estar en BankAccount.kt. Main.kt contiene el código proporcionado de entrada/salida y no se puede editar.
Pruébalo tú mismo
fun main() {
// Código de entrada/salida suministrado: déjalo tal como está
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)
}
}
Todas las lecciones de Programación orientada a objetos
1Clases y objetos
Trabajar con archivosDefinir clasesConstructores primariosBloques init y validaciónConstructores secundariosRepaso - Tarjeta de biblioteca4Herencia
Clases abiertas y subclasesSobrescritura de miembrossuper y constructoresClases abstractasRepaso: directorio del personal2Propiedades y encapsulación
Accesores personalizadosModificadores de visibilidadSetters privadoslazy y lateinitRepaso: cuenta bancaria5Interfaces
Declaración de interfacesMétodos predeterminadosInterfaces múltiplesInterfaces como tiposRepaso: métodos de pago8Genéricos
Funciones genéricasClases genéricasRestricciones de tiposVariancia con in y outRepaso - Cola de prioridad11Proyecto: Gestión de biblioteca
Libros y miembrosPréstamo de librosPractica por tu cuenta: Playground de Kotlin