Wert einer Klasse in Java abfragen |
01.12.2013, 14:36 | Auf diesen Beitrag antworten » |
Haevelin | Wert einer Klasse in Java abfragen Ich muss ein Programm schreiben, welches das Gefangenendilemma modelliert. Insbesondere soll in einer Klasse Pavlov die Strategie so gewählt werden, dass bei Abweichen der Strategie von Spieler 1 und Spieler 2 im vorhergehenden Zug der Spieler, der am Zug ist mit dieser Strategie nicht kooperieren. Mein Code sieht so aus: public class Pavlov implements GefStrategie{ boolean lastdecision; int zugnummer=0; @Override public void setOpponentsLastDecision(boolean decision) { // TODO Auto-generated method stub this.lastdecision=decision; } @Override public boolean getNextDecision() { // TODO Auto-generated method stub zugnummer++; if (zugnummer==1){ return true; } System.out.println(this.getNextDecision()); if (this.getNextDecision()!=lastdecision){ return false; } else { return true; } } } d.h. ich rufe in getNextDecision den aktuellen Wert von getNextDecision durch this.getNextDecision() ab; was führt aber zu einer Fehlermeldung. Wie gelingt es mir auf den aktuellen Wert, der wäre bei Zug 2 bspw. true, von getNextDecision zuzugreifen? |
|
|
01.12.2013, 16:28 | Auf diesen Beitrag antworten » |
Haevelin | RE: Wert einer Klasse in Java abfragen Eine einfache Lösung besteht darin für den Zustand von getNextDecision eine eigene Variable zu benamen und diese dann in der Methode zu belegen. Die Frage ist: Geht es auch auf die Weise, wie ich es zunächst angefangen habe. Mit einem Befehl analog zu Arrays.toString jetzt eine Art wert.toboolean? |
01.12.2013, 17:58 | Auf diesen Beitrag antworten » |
eulerscheZahl | Hallo, in deinem ursprünglichen Programm sehe ich gleich zwei Probleme. 1.: System.out.println(this.getNextDecision()); if (this.getNextDecision()!=lastdecision){ hier rufst du die Methode zweimal auf, bei deiner Implementierung würde ich aber nicht davon ausgehen, dass sie beide Male das selbe Ergebnis ausspuckt. 2.: die Methode getNextDecision() ruft die Methode getNextDecision() auf. Die wiederum ruft dann erneut getNextDecision() auf und so weiter. Du hast eine rekursive Funktion ohne Abbruchbedingung geschrieben, die Methode ruft sich immer wieder selbst auf, bis kein Speicher mehr vorhanden ist. |
02.12.2013, 13:01 | Auf diesen Beitrag antworten » |
Haevelin | Habe es jetzt trivial gelöst: in eigeneEntscheidung ist immer der Wert gespeichert den die Methode vor ihrer Ausführung hatte. /* * implementiert GefStrategie */ public class Pavlov implements GefStrategie { boolean lastdecision; boolean eigeneEntscheidung; int zugnummer = 1; /* * legt die letzte Entscheidung des Gegenuebers fest * * @see GefStrategie#setOpponentsLastDecision(boolean) */ @Override public void setOpponentsLastDecision(boolean decision) { // TODO Auto-generated method stub this.lastdecision = decision; } /* * der erste Zug kooperiert; kooperiert, falls seine letzte Entscheidung von * der des Gegenuebers abweicht, sonst kooperiert er nicht * @return Zugwahl true ist kooperieren, false ist nicht kooperieren * @see GefStrategie#getNextDecision() */ @Override public boolean getNextDecision() { // TODO Auto-generated method stub if (zugnummer == 1) { zugnummer++; eigeneEntscheidung = true; return true; } if (eigeneEntscheidung == lastdecision) { eigeneEntscheidung = false; return false; } else { eigeneEntscheidung = true; return true; } } } |
Anzeige | |
|
|
Verwandte Themen
Die Beliebtesten » |
|
Die Größten » |
|
Die Neuesten » |
|