Wert einer Klasse in Java abfragen

Neue Frage »

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?
 
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?
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.
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;
}
}

}
 
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »