Parcheggio multipiano
Fa parte della sezione Programmazione orientata agli oggetti del percorso Kotlin di Coddy. Lezione 55 di 57.
Sfida
DifficileCrea un garage.
- L'enum
SizecontieneSMALL,MEDIUMeLARGE, in quest'ordine, ciascuno con unlabelin minuscolo. Vehicle(plate)è una classe sealed con le proprietà astrattesizeehourlyRate.Motorbikeè piccolo (1 all'ora),Carè medio (3) eVanè grande (5).Garage(small, medium, large)viene creato indicando il numero di posti per ogni dimensione.park(vehicle)mette il veicolo in un posto libero della sua dimensione oppure, se non ce ne sono, in uno della dimensione immediatamente superiore che ne abbia uno, e restituisceparked AB12 in medium,full for AB12oppureAB12 is already parked.leave(plate, hours)libera il posto e restituisceAB12 paid 9(tariffa moltiplicata per le ore, almeno 1 ora), oppureno vehicle AB12.status()restituiscefree: small 1, medium 0, large 2.
Il codice fornito legge i posti nel formato small,medium,large, poi i comandi park car AB12 (bike, car oppure van), leave AB12 3 o status, e stampa ogni risposta.
Il tuo codice va inserito in Size.kt, Vehicle.kt, Motorbike.kt, Car.kt, Van.kt e Garage.kt. Main.kt contiene il codice di input/output fornito e non può essere modificato.
Provalo tu
fun main() {
// Codice di input/output fornito: lascialo così com'è
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())
}
}
}
Tutte le lezioni di Programmazione orientata agli oggetti
1Classi e oggetti
Lavorare con i fileDefinire le classiCostruttori primariBlocchi init e convalidaCostruttori secondariRiepilogo - Tessera della biblioteca4Ereditarietà
Classi aperte e sottoclassiRidefinizione dei membrisuper e costruttoriClassi astratteRiepilogo - Elenco del personale2Proprietà e incapsulamento
Accessor personalizzatiModificatori di visibilitàSetter privatilazy e lateinitRipasso - Conto bancario5Interfacce
Dichiarare le interfacceMetodi predefinitiInterfacce multipleLe interfacce come tipiRiepilogo - Metodi di pagamento8Tipi generici
Funzioni genericheClassi genericheVincoli sui tipiVarianza con in e outRiepilogo - Coda con priorità11Progetto: Gestione della biblioteca
Libri e sociPrendere in prestito i libriEsercitati da solo: Playground Kotlin