Menu
Coddy logo textTech

復習 - チケット売り場

CoddyのKotlinジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 16/57。

challenge icon

チャレンジ

中級

3種類の宣言を使って、小さなチケット販売所を作成します。

  • Ticket には、number、show、seat を受け取る private コンストラクターがあります。その companion には const val SEATS = 3、private カウンター、そして issue(show, seat) ファクトリがあり、チケットに 1、2、3、... の番号を付けます。issued はこれまでに発行されたチケットの数です。label() は #1 Hamlet seat 2 を返します。
  • BoxOffice は object です。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プレイグラウンド