Menu
Coddy logo textTech

Rückblick – Zoowärter

Teil des Abschnitts Objektorientierte Programmierung der Kotlin-Journey von Coddy. Lektion 31 von 57.

challenge icon

Aufgabe

Mittel

Plane einen Tag im Zoo.

  • Animal(name, kg) ist abstrakt und besitzt die abstrakten Member species, food und dailyGrams() sowie eine Methode line(), die Leo the lion: 5700 g meat zurückgibt.
  • Lion frisst Fleisch, 30 g pro kg. Parrot frisst Samen, unabhängig von seinem Gewicht 50 g pro Tag. Seal frisst Fisch, 40 g pro kg.
  • Das Interface Trainable besitzt trick(). Papageien (Polly says hello) und Robben (Sammy balances a ball) sind trainierbar; Löwen nicht.
  • Die Erweiterung List<Animal>.foodTotals() gibt die Grammzahl pro Futter zurück, wobei die Futtersorten alphabetisch geordnet sind: fish 4000, meat 5700.
  • showLineup(animals) gibt mithilfe einer Typprüfung die Tricks der trainierbaren Tiere in ihrer Reihenfolge zurück oder no show, wenn es keine gibt.

Der bereitgestellte Code liest die Zeilen lion,Leo,190, parrot,Polly,1 oder seal,Sammy,100 ein und gibt jedes line() aus, danach food: mit den Summen sowie eine show: -Zeile pro zurückgegebenem Trick.

Dein Code gehört in Animal.kt, Trainable.kt, Lion.kt, Parrot.kt, Seal.kt und Functions.kt. Main.kt enthält den bereitgestellten Eingabe-/Ausgabecode und darf nicht bearbeitet werden.

Probier es selbst

fun main() {
    // Bereitgestellter Ein-/Ausgabe-Code: belasse ihn wie er ist
    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")
}

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Kotlin-Playground