Menu
Coddy logo textTech

복습 - 동물원 사육사

Coddy Kotlin 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 57개 중 31번째.

challenge icon

챌린지

중급

동물원에서 하루를 계획하세요.

  • Animal(name, kg)는 species, food, dailyGrams() 추상 멤버와 Leo the lion: 5700 g meat을 반환하는 line() 메서드를 가진 추상 클래스입니다.
  • Lion은 고기를 먹으며, kg당 30 g을 먹습니다. Parrot은 씨앗을 먹으며, 무게와 관계없이 하루에 50 g을 먹습니다. Seal은 생선을 먹으며, kg당 40 g을 먹습니다.
  • Trainable 인터페이스에는 trick()이 있습니다. 앵무새(Polly says hello)와 물개(Sammy balances a ball)는 훈련할 수 있지만, 사자는 훈련할 수 없습니다.
  • List<Animal>.foodTotals() 확장은 음식별 그램 수를 반환하며, 음식은 알파벳순으로 정렬됩니다: fish 4000, meat 5700.
  • showLineup(animals)은 타입 검사를 사용하여 훈련할 수 있는 동물들의 트릭을 순서대로 반환하며, 트릭이 없으면 no show를 반환합니다.

제공된 코드는 lion,Leo,190, parrot,Polly,1 또는 seal,Sammy,100 형식의 줄을 읽고 모든 line()을 출력한 다음, 합계와 반환된 각 트릭마다 하나의 show: 줄을 포함한 food: 를 출력합니다.

코드는 Animal.kt, Trainable.kt, Lion.kt, Parrot.kt, Seal.kt 및 Functions.kt에 작성합니다. Main.kt에는 제공된 입력/출력 코드가 있으며 편집할 수 없습니다.

직접 해보기

fun main() {
    // 제공된 입력/출력 코드: 있는 그대로 유지하세요
    val input = generateSequence(::readLine).toList()
    val animals = input.map { line ->
        val (kind, name, kg) = line.split(",")
        when (kind) {
            "lion" -> Lion(name, kg.toInt())
            "parrot" -> Parrot(name, kg.toInt())
            else -> Seal(name, kg.toInt())
        }
    }
    for (a in animals) println(a.line())
    println("food: " + animals.foodTotals())
    for (s in showLineup(animals)) println("show: $s")
}

객체 지향 프로그래밍의 모든 레슨

직접 연습해 보세요: Kotlin 플레이그라운드