Wert einer Klasse in Java abfragen |
Haevelin
Tripel-As
Dabei seit: 04.06.2013
Beiträge: 221
|
|
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 14:36 |
|
|
Haevelin
Tripel-As
Dabei seit: 04.06.2013
Beiträge: 221
|
|
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 16:28 |
|
|
|
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.
__________________ Syntax Highlighting fürs Board (Link)
|
|
01.12.2013 17:58 |
|
|
Haevelin
Tripel-As
Dabei seit: 04.06.2013
Beiträge: 221
|
|
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;
}
}
}
|
|
02.12.2013 13:01 |
|
|
|