class Elefant(val name: String, var gewicht: Double, var groesse: Double, var meinElefant: Elefant?) { fun durchzaehlen(zuvor: Int) { print("Ich, ${name}, sage: ") println(zuvor + 1) if (meinElefant == null) { //Abbruch } else { //rekursiver Aufruf meinElefant?.durchzaehlen(zuvor + 1) } } fun durchzaehlenKuerzer(zuvor: Int) { println("Ich, ${name}, sage: ${zuvor + 1}") //Fragezeichenfallunterscheidung - rekursiver Aufruf oder Abbruch meinElefant?.durchzaehlen(zuvor + 1) } fun zaehlenMitAggregat(zuvor: Int): Int { if (meinElefant != null) { return meinElefant!!.zaehlenMitAggregat(zuvor + 1) } else { return zuvor + 1 } } // Nur zur Information: Es ginge auch so .... fun zaehlenMitAggregatAlternativ(zuvor: Int): Int { val nachfolger = meinElefant if (nachfolger is Elefant) { return nachfolger.zaehlenMitAggregatAlternativ(zuvor + 1) } else { return zuvor + 1 } } fun zaehlen(): Int { if (meinElefant == null) { return 1 } else { return meinElefant!!.zaehlen() + 1 } } fun elefantAufnehmen(neuerElefant: Elefant) { if (meinElefant != null) { meinElefant!!.elefantAufnehmen(neuerElefant) } else { meinElefant = neuerElefant } } fun istElefantDabei(suchname: String): Boolean { if (name == suchname) { return true } else { if (meinElefant == null) { return false } else { return meinElefant!!.istElefantDabei(suchname) } } } fun gibElefantenPosition(suchname: String): Int { if (suchname == name) { return 1 } else{ if (meinElefant != null) { val rueckmeldung = meinElefant!!.gibElefantenPosition(suchname) if (rueckmeldung < 0) return rueckmeldung else return rueckmeldung + 1 } else { return -1 } } } fun gibElefantenPosition2(suchname: String): Int { if (!istElefantDabei(suchname)) return -1 else { if (suchname == name) { return 1 } else{ if (meinElefant != null) { return meinElefant!!.gibElefantenPosition2(suchname) + 1 } else { // kann eigentlich nicht vorkommen return -999999 } } } } fun gibElefantenPositionKotlin(suchname: String): Int? { if (suchname == name) return 1 else return meinElefant?.gibElefantenPositionKotlin(suchname)?.plus(1) } fun elefantenAusscheidenLassen(suchname: String): Elefant? { if (suchname == name) return meinElefant else { if (meinElefant != null) { meinElefant = meinElefant!!.elefantenAusscheidenLassen(suchname) } return this } } } val fanti = Elefant("Tusnelda", 1480.39, 4.2, null) fanti.elefantAufnehmen(Elefant("Bert", 1180.35, 3.78, null)) fanti.elefantAufnehmen(Elefant("Jorge", 1680.35, 4.54, null)) fanti.elefantAufnehmen(Elefant("Gerda", 1480.35, 4.11, null)) fanti.elefantAufnehmen(Elefant("Hansi", 1270.35, 4.32, null))