주차장
Coddy Kotlin 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 57개 중 55번째.
챌린지
어려움주차장을 만드세요.
- 열거형
Size에는 순서대로SMALL,MEDIUM,LARGE가 있으며, 각각 소문자label을 가집니다. Vehicle(plate)는 추상 속성size와hourlyRate를 가진 봉인 클래스입니다.Motorbike는 소형(시간당 1),Car는 중형(3),Van은 대형(5)입니다.Garage(small, medium, large)는 크기별 주차 공간 수로 생성됩니다.park(vehicle)는 차량을 해당 크기의 빈 공간에 주차하거나, 빈 공간이 없으면 빈 공간이 있는 다음으로 큰 크기의 공간에 주차하고parked AB12 in medium,full for AB12또는AB12 is already parked를 반환합니다.leave(plate, hours)는 공간을 비우고AB12 paid 9(요금에 시간을 곱한 값, 최소 1시간) 또는no vehicle AB12를 반환합니다.status()는free: small 1, medium 0, large 2를 반환합니다.
제공된 코드는 주차 공간을 small,medium,large 형식으로 읽은 다음, park car AB12(bike, car 또는 van), leave AB12 3 또는 status 명령을 읽고 각 응답을 출력합니다.
작성한 코드는 Size.kt, Vehicle.kt, Motorbike.kt, Car.kt, Van.kt 및 Garage.kt에 작성합니다. Main.kt에는 제공된 입력/출력 코드가 있으며 편집할 수 없습니다.
직접 해보기
fun main() {
// 제공된 입력/출력 코드: 그대로 유지하세요
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())
}
}
}
객체 지향 프로그래밍의 모든 레슨
직접 연습해 보세요: Kotlin 플레이그라운드