Estacionamento
Parte da seção Programação Orientada a Objetos do Journey de Kotlin da Coddy. Lição 55 de 57.
Desafio
DifícilConstrua uma garagem.
- O enum
SizecontémSMALL,MEDIUMeLARGE, nessa ordem, cada um com umlabelem letras minúsculas. Vehicle(plate)é uma classe selada com as propriedades abstratassizeehourlyRate.Motorbikeé pequena (1 por hora),Caré média (3) eVané grande (5).Garage(small, medium, large)é criada com o número de vagas por tamanho.park(vehicle)coloca o veículo em uma vaga livre do próprio tamanho ou, se não houver nenhuma, do próximo tamanho maior que tenha uma vaga, e respondeparked AB12 in medium,full for AB12ouAB12 is already parked.leave(plate, hours)libera a vaga e respondeAB12 paid 9(valor por hora vezes o número de horas, no mínimo 1 hora) ouno vehicle AB12.status()respondefree: small 1, medium 0, large 2.
O código fornecido lê as vagas como small,medium,large, depois os comandos park car AB12 (bike, car ou van), leave AB12 3 ou status, e imprime cada resposta.
Seu código deve ficar em Size.kt, Vehicle.kt, Motorbike.kt, Car.kt, Van.kt e Garage.kt. Main.kt contém o código fornecido de entrada/saída e não pode ser editado.
Experimente você mesmo
fun main() {
// Código de entrada/saída fornecido: mantenha-o como está
val input = generateSequence(::readLine).toList()
val (small, medium, large) = input[0].split(",").map { it.toInt() }
val garage = Garage(small, medium, large)
for (cmd in input.drop(1)) {
val p = cmd.split(" ")
when (p[0]) {
"park" -> {
val vehicle = when (p[1]) {
"bike" -> Motorbike(p[2])
"van" -> Van(p[2])
else -> Car(p[2])
}
println(garage.park(vehicle))
}
"leave" -> println(garage.leave(p[1], p[2].toInt()))
else -> println(garage.status())
}
}
}
Todas as lições de Programação Orientada a Objetos
1Classes e Objetos
Trabalhando com ArquivosDefinindo ClassesConstrutores PrimáriosBlocos init e ValidaçãoConstrutores SecundáriosRecapitulação - Cartão da Biblioteca4Herança
Classes Abertas e SubclassesSobrescrevendo Membrossuper e ConstrutoresClasses AbstratasRevisão - Diretório de Funcionários2Propriedades e Encapsulamento
Acessores PersonalizadosModificadores de VisibilidadeSetters Privadoslazy e lateinitRevisão - Conta Bancária5Interfaces
Declarando InterfacesMétodos PadrãoMúltiplas InterfacesInterfaces como TiposRecapitulação - Métodos de Pagamento8Genéricos
Funções genéricasClasses genéricasRestrições de tipoVariância com in e outRecapitulação - Fila de prioridade11Projeto: Gerenciamento de Biblioteca
Livros e MembrosEmpréstimo de LivrosPratique por conta própria: Playground de Kotlin