Snippets
Created by
hackmac
last modified
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 | /**
* Übungsaufgabe: Autovermietung
* https://gist.github.com/innicovation21/adc40fa1f502093a1e8e6b3b6b113860#%C3%BCbungsaufgabe-autovermietung
*/
class Autovermietung (
val filialLeiter: String,
val standort: String
) {
var anzahlAuto: UInt
get() {
println("getting anzahlAuto $field")
return field
}
val info: String
// Das geht nicht: `info` wird erst in `init` initialisiert
// val info1 = info
// Das geht nicht: `info3` wird erst unten initialisiert
// val info2 = info3
val info3 = "Leitung: $filialLeiter, Standort: $standort"
var info4 = info3 // ok: `info` ist schon initialisiert
get() {
println("getting info4 $field")
return field
}
set(wert) {
field = wert
println("setting info4 $field")
}
private val farbe: String = "rot"
public fun getFarbe(): String {
println("getting farbe $farbe")
return farbe
}
fun getWert(): Any {
return 1
}
constructor(x: UInt) : this("Leiter", "Ort") {
println("-> second constructor")
anzahlAuto = x
}
init {
println("-> init")
info = "Leitung: $filialLeiter, Standort: $standort"
anzahlAuto = 0u
}
/**
* Gibt ein Auto zurück in die Autovermietung.
* Erhöht die Anzahl der verfügbaren Autos.
*/
fun autoAbstellen(anzahl: UInt = 1u) {
anzahlAuto += anzahl
}
/**
* Vermietet ein Auto.
* Verringert die Anzahl der verfügbaren Autos und gibt eine Bestätigungsnachricht aus.
*/
fun autoRausgeben(anzahl: UInt = 1u) {
if (anzahl > anzahlAuto) {
anzahlAuto = 0u
} else {
anzahlAuto -= anzahl
}
println("Aktueller Bestand:")
println("$anzahlAuto Autos")
println()
}
/**
* Gibt den Namen des Filialleiters, Standort und die Anzahl der verfügbaren Autos aus
*/
fun infoFiliale() {
println("Filial-Info")
println("$info, Anzahl: $anzahlAuto")
println()
}
}
fun main() {
val filiale = Autovermietung("Max Mannmuster", "Berlin") // Teilaufgabe 1 und 2
filiale.autoAbstellen(2u) // Teilaufgabe 3
filiale.infoFiliale() // Teilaufgabe 4
filiale.autoRausgeben() // Teilaufgabe 5
filiale.infoFiliale() // Teilaufgabe 6
val filiale2 = Autovermietung(10u)
filiale2.infoFiliale()
var info = filiale2.info4
filiale2.info4 = "keine Info"
var anzahl = filiale2.anzahlAuto
var farbe = filiale2.getFarbe()
}
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 | /**
* Übungsaufgabe: Teilnehmer und Kurse
*
* In dieser Übungsaufgabe sollst du eine Klasse für Teilnehmer und eine innere Klasse für Kurse
* erstellen. Ein Teilnehmer kann mehrere Kurse besuchen, und ein Kurs hat einen Namen und eine
* maximale Anzahl von Teilnehmern.
*
* Teilnehmer-Klasse
* Erstelle eine Klasse mit dem Namen "Teilnehmer". Die Klasse soll folgende Eigenschaften haben:
* - name (String): Der Name des Teilnehmers.
* - kurse (Liste von Kursen): Eine Liste der Kurse, die der Teilnehmer besucht.
*
* Die Klasse soll die folgenden Methoden haben:
* - kursHinzufügen(kurs: Kurs): Diese Methode fügt einen Kurs zur Liste der Kurse des Teilnehmers hinzu.
* - kursEntfernen(kurs: Kurs): Diese Methode entfernt einen Kurs aus der Liste der Kurse des Teilnehmers.
* - kurseAnzeigen(): Diese Methode gibt die Namen der Kurse aus, die der Teilnehmer besucht.
*
* Kurs-Innere-Klasse
* Erstelle eine innere Klasse mit dem Namen "Kurs" innerhalb der Teilnehmer-Klasse.
* Die Kurs-Klasse soll folgende Eigenschaften haben:
* - name (String): Der Name des Kurses.
* - maxTeilnehmer (Int): Die maximale Anzahl von Teilnehmern für den Kurs.
*
* Die Kurs-Klasse soll keine eigenen Methoden haben.
* Anleitung:
* - Erstelle die Teilnehmer-Klasse mit den oben genannten Eigenschaften und Methoden.
* - Erstelle die Kurs-Innere-Klasse innerhalb der Teilnehmer-Klasse mit den oben genannten Eigenschaften.
* - Implementiere die Methoden der Teilnehmer-Klasse, um Kurse hinzuzufügen, zu entfernen und anzuzeigen.
* - Erstelle ein Objekt der Teilnehmer-Klasse und füge einige Kurse hinzu.
* - Rufe die Methode kurseAnzeigen() auf, um die Namen der besuchten Kurse auszugeben.
*/
class Teilnehmer(val name: String) {
inner class IClass {
fun printInfo() {
kurseAnzeigen()
}
}
/* nested */ class Kurs(
val name: String,
private val maxTeilnehmer: Int = 30,
private val teilnehmerListe: MutableSet<Teilnehmer> = mutableSetOf()
) {
fun teilnehmen(teilnehmer: Teilnehmer): Boolean {
if (maxTeilnehmer > teilnehmerListe.size) {
teilnehmerListe.add(teilnehmer)
return true
}
return false
}
fun austragen(teilnehmer: Teilnehmer) {
if (teilnehmerListe.contains(teilnehmer)) {
teilnehmerListe.remove(teilnehmer)
}
}
fun teilnehmerAnzeigen() {
println("Teilnehmer für ${name}: ${teilnehmerListe.map { it.name }}")
}
}
val kurse: MutableSet<Kurs> = mutableSetOf()
fun hinzufügen(kurs: Kurs) {
val kursVoll = !kurs.teilnehmen(this)
if (kursVoll) {
kurse.add(kurs)
}
}
fun entfernen(kurs: Kurs) {
if (kurse.contains(kurs)) {
kurse.remove(kurs)
kurs.austragen(this)
}
}
fun kurseAnzeigen() {
println("$name nimmt an folgenden Kursen teil: ${kurse.map {it.name}}")
}
}
fun main() {
val henrik = Teilnehmer("Henrik")
val nico = Teilnehmer("Nico")
val kotlinKurs = Teilnehmer.Kurs("Kotlin")
val iOSKurs = Teilnehmer.Kurs("iOS")
henrik.hinzufügen(kotlinKurs)
henrik.hinzufügen(iOSKurs)
nico.hinzufügen(iOSKurs)
henrik.kurseAnzeigen()
iOSKurs.teilnehmerAnzeigen()
println()
println("mit inner class")
val ic = henrik.IClass()
val ic2 = nico.IClass()
ic.printInfo()
ic2.printInfo()
}
|
Comments (0)
You can clone a snippet to your computer for local editing. Learn more.