Sitzung: Jeden Freitag in der Vorlesungszeit ab 16 Uhr c. t. im MAR 0.005. In der vorlesungsfreien Zeit unregelmäßig (Jemensch da?). Macht mit!

Javakurs/Übungsaufgaben/Rennschnecke: Unterschied zwischen den Versionen

(Rennen: objekt protokoll ist public String toString(), nicht String toString())
K (Änderung 20691 von 130.149.245.248 (Diskussion) rückgängig gemacht. - Beleidigungen haben hier nichts zu suchen)
 
(30 dazwischenliegende Versionen von 14 Benutzern werden nicht angezeigt)
Zeile 2: Zeile 2:
 
#Erstelle eine Klasse "Rennschnecke"
 
#Erstelle eine Klasse "Rennschnecke"
 
#:
 
#:
#Rennschnecken sollen folgende Eigenschaften(Klassenvariablen) besitzen:
+
#Rennschnecken sollen folgende Eigenschaften(Objektvariablen) besitzen:
 
#* einen Namen
 
#* einen Namen
 
#* eine Rasse
 
#* eine Rasse
#* eine Maximalgeschwindigkeit
+
#* eine Maximalgeschwindigkeit (Veränderung der Strecke pro Schritt)
 
#* die Schnecke soll wissen welchen Weg sie bereits zurück gelegt hat
 
#* die Schnecke soll wissen welchen Weg sie bereits zurück gelegt hat
 
#:
 
#:
# Erstelle für die Klasse Schnecke einen Constructor, der den Klassenvariablen beim Erstellen einer neuen Instanz(Objekt zu dieser Klasse) Werte zuweist.
+
# Erstelle für die Klasse Rennschnecke einen [[Javakurs2006/Java_Kurzreferenz#Konstruktor|Konstruktor]], der den Instanzvariablen beim Erstellen einer neuen Instanz (Objekt zu dieser Klasse) Werte zuweist.
 
#:
 
#:
#Lege für in der Klasse "Rennschnecke" eine Methode "krieche()" an, welche die Schnecke abhängig von ihrer Maximalgeschwindigkeit eine zufällige Strecke weiter bewegt.
+
#Lege in der Klasse "Rennschnecke" eine Methode "krieche()" an, welche die Schnecke abhängig von ihrer Maximalgeschwindigkeit eine zufällige Strecke weiter bewegt. Soll heißen: Sie kriecht eine zufällige Strecke größer null und kleiner ihrer Maximalgeschwindigkeit. Nimm als Zeiteinheit 1 an.
#* Tipp: schaut euch die Methode Math.random() aus der Java API an.
+
#* Tipp: Schaut euch die Methode Math.random() aus der Java API an.
 
#:
 
#:
 
#Lege in der Klasse "Rennschnecke" eine Methode "public String toString()" an, welche die Daten der Schnecke mit return als String zurückgibt.
 
#Lege in der Klasse "Rennschnecke" eine Methode "public String toString()" an, welche die Daten der Schnecke mit return als String zurückgibt.
 
#:
 
#:
# Teste deine Klasse indem du probehalber ein Rennschneckenobjekt erzeugst und seine Daten auf der Console ausgibst.  
+
# Teste deine Klasse, indem du probehalber ein Rennschneckenobjekt erzeugst und seine Daten auf der Konsole ausgibst.  
 
#*Tipp:Verwende zum Ausgeben der Daten die toString() Methode der Rennschnecke.
 
#*Tipp:Verwende zum Ausgeben der Daten die toString() Methode der Rennschnecke.
 
#:
 
#:
Zeile 25: Zeile 25:
 
#:
 
#:
 
#Ein Rennen hat folgende Eigenschaften:
 
#Ein Rennen hat folgende Eigenschaften:
#*Einen Namen
+
#*einen Namen
#*Die Anzahl der teilnehmenden Schnecken
+
#*die Anzahl der teilnehmenden Schnecken
#*Die teilnemenden Schnecken selbst (z.B. in einer ArrayList)
+
#*die teilnemenden Schnecken selbst, als:
 +
#** Array: einfachere Umsetzung mit konstanter Teilnehmerzahl
 +
#** [[Javakurs2007/ArrayList|ArrayList]]: schönere Umsetzung mit variabler Teilnehmerzahl
 +
#*** Tipps:
 +
#**** Verwende als Datentyp ArrayList<Rennschnecke>
 +
#**** Verwende beim Erstellen new ArrayList<Rennschnecke>()
 
#*die Länge der zu kriechenden Strecke
 
#*die Länge der zu kriechenden Strecke
 
#:
 
#:
#Überlege dir welche dieser Wetrte bereits im Constructor gesetzt werden sollten.
+
#Überlege dir, welche dieser Werte bereits im Konstruktor gesetzt werden sollten.
 
#:
 
#:
 
#Lege in der Klasse "Rennen" eine Methode "void addRennschnecke(Rennschnecke neueSchnecke)" an, welche dem Rennen eine Schnecke hinzufügt.
 
#Lege in der Klasse "Rennen" eine Methode "void addRennschnecke(Rennschnecke neueSchnecke)" an, welche dem Rennen eine Schnecke hinzufügt.
 
#:
 
#:
#Lege in der Klasse "Rennen" eine Methode "void removeRennschnecke(String name)" an, welche eine Schnecke aus dem Rennen entfernt.
+
#Lege in der Klasse "Rennen" eine Methode "void removeRennschnecke(String name)" an, welche eine Schnecke aus dem Rennen entfernt. (nicht so einfach und kann erstmal übersprungen werden)
 
#:
 
#:
 
#Lege in der Klasse "Rennen" eine Methode "public String toString()" an, welche die Daten des Rennens mit return als String zurückgibt.  
 
#Lege in der Klasse "Rennen" eine Methode "public String toString()" an, welche die Daten des Rennens mit return als String zurückgibt.  
#*Tipp: Um die Daten der beteiligten Schnecken zurückzugeben könnt ihr deren toString() Funktion benutzen.
+
#*Tipp: Um die Daten der beteiligten Schnecken zurückzugeben, könnt ihr deren toString() Funktion benutzen.
 
#:
 
#:
 
#Teste deine Klasse vom Hauptprogramm aus!
 
#Teste deine Klasse vom Hauptprogramm aus!
 
#:
 
#:
#Lege in der Klasse "Rennen" eine Methode "Rennschnecke ermittleGewinner()" an, welche '''null''' zurückliefert wenn noch keine der Teilnemenden Schnecken das Ziel erreicht und anderenfalls die  
+
#Lege in der Klasse "Rennen" eine Methode "Rennschnecke ermittleGewinner()" an, welche '''null''' zurückliefert, wenn noch keine der teilnemenden Schnecken das Ziel erreicht hat und anderenfalls die Gewinnerschnecke zurückgibt.
#:Gewinnerschnecke zurückgibt.
 
 
#:
 
#:
 
#Lege in der Klasse "Rennen" eine Methode "void lasseSchneckenKriechen()" an, welche alle teilnemenden Schnecken einmal kriechen lässt.
 
#Lege in der Klasse "Rennen" eine Methode "void lasseSchneckenKriechen()" an, welche alle teilnemenden Schnecken einmal kriechen lässt.
 
#:
 
#:
 
#Lege in der Klasse "Rennen" eine Methode "void durchfuehren()" an, welche so lange lasseSchneckenKriechen() aufruft, bis eine der Schnecken das Ziel erreicht hat.
 
#Lege in der Klasse "Rennen" eine Methode "void durchfuehren()" an, welche so lange lasseSchneckenKriechen() aufruft, bis eine der Schnecken das Ziel erreicht hat.
#* Tipp: ob eine Schnecke im Ziel angekommen ist kannst du mit deiner Methode ermittleGewinner() herrausfinden.
+
#* Tipp: Ob eine Schnecke im Ziel angekommen ist, kannst du mit deiner Methode ermittleGewinner() herrausfinden.
  
 
== Wettbüro ==
 
== Wettbüro ==
Zeile 54: Zeile 58:
 
#:
 
#:
 
#:Ein Wettbuero hat die folgenden Eigenschaften:
 
#:Ein Wettbuero hat die folgenden Eigenschaften:
#* es weiß für welches Rennen es seine Wetten entgegennimmt
+
#* Es weiß, für welches Rennen es seine Wetten entgegennimmt.
#* es verfügt über eine Liste (z.B. eine Arraylist) von angenommenden Wetten
+
#* Es verfügt über eine Liste (z.B. eine ArrayList) von angenommenen Wetten.
#* es hat einen festen Faktor, mit welchem Wetteinsätze bei einem Gewinn multipliziert werden
+
#* Es hat einen festen Faktor, mit welchem Wetteinsätze bei einem Gewinn multipliziert werden.
 
#:
 
#:
#Lege in der Klasse "Wettbuero" eine Methode "wetteAnnehmen(String schneckenName, int wetteinsatz, String spieler)" an, welche eine Wette auf eine Schnecke für das Rennen das von dem Büro bearbeitet wird entgegennimmt.
+
#Lege in der Klasse "Wettbuero" eine Methode "wetteAnnehmen(String schneckenName, int wettEinsatz, String spieler)" an, welche eine Wette entgegennimmt. Die Wette ist bezogen auf eine Schnecke für das Rennen, das von dem Büro bearbeitet wird.
#* Um die einzelnden Wetten speichern zu können sollten ihre Daten in eigenden Objekten der Klasse "Wette" gespeichert werden. Erstellt euch diese Klasse selbst.  
+
#* Um die einzelnen Wetten speichern zu können, sollten ihre Daten in eigenen Objekten der Klasse "Wette" gespeichert werden. Erstellt euch diese Klasse selbst.  
#* Tipp: denkt an toString()
+
#* Tipp: Denkt an toString().
 
#:
 
#:
#Lege in der Klasse "Wettbuero" eine Methode "rennenDurchfueren()" an, welche das betreute Rennen durchfuert.
+
#Lege in der Klasse "Wettbuero" eine Methode "rennenDurchfuehren()" an, welche das betreute Rennen durchfuert.
 
#:
 
#:
 
#Lege in der Klasse "Wettbuero" eine Methode "toString()" an, welche die Daten des Wettbueros, die Daten des Rennens sowie sämtliche abgeschlossende Wetten als String zurückgibt.
 
#Lege in der Klasse "Wettbuero" eine Methode "toString()" an, welche die Daten des Wettbueros, die Daten des Rennens sowie sämtliche abgeschlossende Wetten als String zurückgibt.
Zeile 68: Zeile 72:
 
# Teste dein Programm!
 
# Teste dein Programm!
 
#:
 
#:
# Tausche die Klasse Rennen mit einem Komilitonen der ebenfalls bereits fertig ist.
+
# Tausche die Klasse Rennen mit einem Kommilitonen, der ebenfalls bereits fertig ist.
 
#* Sollten eure Programme immer noch laufen?
 
#* Sollten eure Programme immer noch laufen?
#* Treten Fehler auf? Wenn ja: ändert eure Programme so ab das ihr problemlos Klassen austauschen könnt.
+
#* Treten Fehler auf? Wenn ja: ändert eure Programme so ab, dass ihr problemlos Klassen austauschen könnt.
  
 
== Zusatz ==
 
== Zusatz ==
  
Es gibt noch ein paar Dinge die in unserem Wettbüro nicht so laufen wie sie sollten.  
+
Es gibt noch ein paar Dinge, die in unserem Wettbüro nicht so laufen wie sie sollten.  
 
Macht sie besser.
 
Macht sie besser.
  
* Die selbe Schnecke kann in ein Rennen zwei mal eingetragen werden
+
* Dieselbe Schnecke kann in ein Rennen zweimal eingetragen werden.
* es können negative Wetten abgeschlossen werden.
+
* Es können negative Wetten abgeschlossen werden.
* gehen zwei Schnecken gleichzeitig durchs Ziel wird die Schnecke ausgegeben auf die die Suche nach dem Gewinner zuerst stößt. Das ist ganz schön ungerecht.
+
* Gehen zwei Schnecken gleichzeitig durchs Ziel, wird die Schnecke ausgegeben, auf die die Suche nach dem Gewinner zuerst stößt. Das ist ganz schön ungerecht.
 +
 
 +
 
 +
<!--
 +
== Zusatz Vererbung ==
 +
 
 +
* Wo Geld im Spiel ist wird auch betrogen. Aus diesem Grund wollen wir jezt auch gedopte Rennschnecken an unseren Rennen teilnehmen lassen.
 +
** Erstelle eine Klasse "Dopingschnecke", welche alle Attribute und Methoden der gemeinen "Rennschnecke" erbt.
 +
** Überschreibe den geerbten Constructor, so das "Dopingschnecken" eine wesentlich höhere Maximalgeschwindigkeit erhalten als normale "Rennschnecken".
 +
** Überschreibe die geerbte Methode "String toString()" so dass Dopingschnecken anders ausgegeben werden als Rennschnecken (z.B. durch einen zusatz wie "rote Augen" oder ähnliches)
 +
** Mische in einem Rennen Dopingschnecken unter deine Rennschnecken. Du musst dafür keinerlei Funktionalitäten änder. Dein Programm muss nicht wissen ob es sich um eine Dopingschnecke handelt, denn sie ist ja auch eine Rennschnecke.
 +
-->
 +
 
 +
 
 +
 
 +
 
 +
 
 +
== Kommentare ==
 +
Wenn du Anmerkungen zur Aufgabe hast oder Lob und Kritik loswerden möchtest, ist hier die richtige Stelle dafür. Klicke einfach ganz rechts auf "bearbeiten" und schreibe deinen Kommentar direkt ins Wiki. Keine Scheu, es geht nichts kaputt ;)
 +
 
 +
<!--
 +
Als kleine Starthilfe folgt ein Beispiel, wie so ein Kommentar formatiert sein könnte. Mit "Vorschau zeigen" kannst du dir ansehen, was deine Änderung bewirken würde, ohne wirklich etwas zu ändern.
 +
Du musst übrigens außerhalb dieses auskommentieren Bereichs schreiben ;)
 +
 
 +
==== Robert ====
 +
Na mal schauen, ob irgendjemand diese Funktion wirklich benutzt. Ich fände es jedenfalls toll.
 +
-->
 +
 
 +
==== Felix S. ====
 +
"abhängig von ihrer Maximalgeschwindigkeit" verwirrte mehrmals Teilnehmer. Mathematischen Bezug/Verfahren hinschreiben bzw. erst mal auf das Kriechen konzentrieren.
 +
 
 +
[[Kategorie:Java]]
 +
[[Kategorie:Java_Aufgaben]]

Aktuelle Version vom 10. März 2013, 15:24 Uhr

Rennschnecke

  1. Erstelle eine Klasse "Rennschnecke"
  2. Rennschnecken sollen folgende Eigenschaften(Objektvariablen) besitzen:
    • einen Namen
    • eine Rasse
    • eine Maximalgeschwindigkeit (Veränderung der Strecke pro Schritt)
    • die Schnecke soll wissen welchen Weg sie bereits zurück gelegt hat
  3. Erstelle für die Klasse Rennschnecke einen Konstruktor, der den Instanzvariablen beim Erstellen einer neuen Instanz (Objekt zu dieser Klasse) Werte zuweist.
  4. Lege in der Klasse "Rennschnecke" eine Methode "krieche()" an, welche die Schnecke abhängig von ihrer Maximalgeschwindigkeit eine zufällige Strecke weiter bewegt. Soll heißen: Sie kriecht eine zufällige Strecke größer null und kleiner ihrer Maximalgeschwindigkeit. Nimm als Zeiteinheit 1 an.
    • Tipp: Schaut euch die Methode Math.random() aus der Java API an.
  5. Lege in der Klasse "Rennschnecke" eine Methode "public String toString()" an, welche die Daten der Schnecke mit return als String zurückgibt.
  6. Teste deine Klasse, indem du probehalber ein Rennschneckenobjekt erzeugst und seine Daten auf der Konsole ausgibst.
    • Tipp:Verwende zum Ausgeben der Daten die toString() Methode der Rennschnecke.

Rennen

  1. Erstelle eine Klasse "Rennen"
  2. Ein Rennen hat folgende Eigenschaften:
    • einen Namen
    • die Anzahl der teilnehmenden Schnecken
    • die teilnemenden Schnecken selbst, als:
      • Array: einfachere Umsetzung mit konstanter Teilnehmerzahl
      • ArrayList: schönere Umsetzung mit variabler Teilnehmerzahl
        • Tipps:
          • Verwende als Datentyp ArrayList<Rennschnecke>
          • Verwende beim Erstellen new ArrayList<Rennschnecke>()
    • die Länge der zu kriechenden Strecke
  3. Überlege dir, welche dieser Werte bereits im Konstruktor gesetzt werden sollten.
  4. Lege in der Klasse "Rennen" eine Methode "void addRennschnecke(Rennschnecke neueSchnecke)" an, welche dem Rennen eine Schnecke hinzufügt.
  5. Lege in der Klasse "Rennen" eine Methode "void removeRennschnecke(String name)" an, welche eine Schnecke aus dem Rennen entfernt. (nicht so einfach und kann erstmal übersprungen werden)
  6. Lege in der Klasse "Rennen" eine Methode "public String toString()" an, welche die Daten des Rennens mit return als String zurückgibt.
    • Tipp: Um die Daten der beteiligten Schnecken zurückzugeben, könnt ihr deren toString() Funktion benutzen.
  7. Teste deine Klasse vom Hauptprogramm aus!
  8. Lege in der Klasse "Rennen" eine Methode "Rennschnecke ermittleGewinner()" an, welche null zurückliefert, wenn noch keine der teilnemenden Schnecken das Ziel erreicht hat und anderenfalls die Gewinnerschnecke zurückgibt.
  9. Lege in der Klasse "Rennen" eine Methode "void lasseSchneckenKriechen()" an, welche alle teilnemenden Schnecken einmal kriechen lässt.
  10. Lege in der Klasse "Rennen" eine Methode "void durchfuehren()" an, welche so lange lasseSchneckenKriechen() aufruft, bis eine der Schnecken das Ziel erreicht hat.
    • Tipp: Ob eine Schnecke im Ziel angekommen ist, kannst du mit deiner Methode ermittleGewinner() herrausfinden.

Wettbüro

  1. Erstelle eine Klasse Wettbuero.
    Ein Wettbuero hat die folgenden Eigenschaften:
    • Es weiß, für welches Rennen es seine Wetten entgegennimmt.
    • Es verfügt über eine Liste (z.B. eine ArrayList) von angenommenen Wetten.
    • Es hat einen festen Faktor, mit welchem Wetteinsätze bei einem Gewinn multipliziert werden.
  2. Lege in der Klasse "Wettbuero" eine Methode "wetteAnnehmen(String schneckenName, int wettEinsatz, String spieler)" an, welche eine Wette entgegennimmt. Die Wette ist bezogen auf eine Schnecke für das Rennen, das von dem Büro bearbeitet wird.
    • Um die einzelnen Wetten speichern zu können, sollten ihre Daten in eigenen Objekten der Klasse "Wette" gespeichert werden. Erstellt euch diese Klasse selbst.
    • Tipp: Denkt an toString().
  3. Lege in der Klasse "Wettbuero" eine Methode "rennenDurchfuehren()" an, welche das betreute Rennen durchfuert.
  4. Lege in der Klasse "Wettbuero" eine Methode "toString()" an, welche die Daten des Wettbueros, die Daten des Rennens sowie sämtliche abgeschlossende Wetten als String zurückgibt.
  5. Teste dein Programm!
  6. Tausche die Klasse Rennen mit einem Kommilitonen, der ebenfalls bereits fertig ist.
    • Sollten eure Programme immer noch laufen?
    • Treten Fehler auf? Wenn ja: ändert eure Programme so ab, dass ihr problemlos Klassen austauschen könnt.

Zusatz

Es gibt noch ein paar Dinge, die in unserem Wettbüro nicht so laufen wie sie sollten. Macht sie besser.

  • Dieselbe Schnecke kann in ein Rennen zweimal eingetragen werden.
  • Es können negative Wetten abgeschlossen werden.
  • Gehen zwei Schnecken gleichzeitig durchs Ziel, wird die Schnecke ausgegeben, auf die die Suche nach dem Gewinner zuerst stößt. Das ist ganz schön ungerecht.




Kommentare

Wenn du Anmerkungen zur Aufgabe hast oder Lob und Kritik loswerden möchtest, ist hier die richtige Stelle dafür. Klicke einfach ganz rechts auf "bearbeiten" und schreibe deinen Kommentar direkt ins Wiki. Keine Scheu, es geht nichts kaputt ;)


Felix S.

"abhängig von ihrer Maximalgeschwindigkeit" verwirrte mehrmals Teilnehmer. Mathematischen Bezug/Verfahren hinschreiben bzw. erst mal auf das Kriechen konzentrieren.