복습 - 매표소
Coddy Kotlin 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 57개 중 16번째.
챌린지
중급세 가지 선언 종류로 작은 매표소를 만드세요.
Ticket에는number,show,seat을 받는 private 생성자가 있습니다. companion에는const val SEATS = 3, private 카운터와 티켓에 1, 2, 3, ... 번호를 부여하는 팩토리issue(show, seat)가 있습니다.issued는 지금까지 발급된 티켓 수입니다.label()은#1 Hamlet seat 2를 반환합니다.BoxOffice는 객체입니다.sell(show, seat)은 좌석이 1부터Ticket.SEATS범위를 벗어나면no seat 4를, 해당 공연에서 이미 판매된 좌석이면seat 2 taken을 반환하고, 그렇지 않으면 티켓을 발급한 뒤 해당 티켓의 레이블을 반환합니다.refund(number)은 판매된 티켓의 좌석을 비우고refunded #1을 반환하거나,no ticket #9를 반환합니다.report()는 공연을 알파벳순으로 정렬하여Hamlet 2/3, Cats 1/3을 반환하거나,nothing sold를 반환합니다.
제공된 코드는 sell Hamlet 2, refund 1 또는 report 명령을 읽고, 각 응답을 출력한 다음 마지막으로 발급된 수와 함께 tickets issued: 를 출력합니다. 환불된 티켓 번호는 다시 사용되지 않습니다.
코드는 Ticket.kt와 BoxOffice.kt에 작성하세요. Main.kt에는 제공된 입력/출력 코드가 있으며 수정할 수 없습니다.
직접 해보기
fun main() {
// 제공된 입력/출력 코드: 그대로 유지하세요
val input = generateSequence(::readLine).toList()
for (cmd in input) {
val p = cmd.split(" ")
when (p[0]) {
"sell" -> println(BoxOffice.sell(p[1], p[2].toInt()))
"refund" -> println(BoxOffice.refund(p[1].toInt()))
else -> println(BoxOffice.report())
}
}
println("tickets issued: ${Ticket.issued}")
}
객체 지향 프로그래밍의 모든 레슨
직접 연습해 보세요: Kotlin 플레이그라운드