복습 - 동물원 사육사
Coddy Kotlin 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 57개 중 31번째.
챌린지
중급동물원에서 하루를 계획하세요.
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 플레이그라운드