Hallo liebe Mitglieder,
ich habe ein Programm geschrieben, welches Spielsteine verschiebt und die höchste Punktzahl ausgibt. Das Programm funktioniert, ist jedoch rekursiv geschrieben und hängt sich bei großen Feldern auf. Ich wollte das Programm nun iterative schreiben. Die einzelnen Elemente werden in die Liste eingefügt, aber er immer das Orginalelement auf und arbeitet damit. Aus diesem Grund läuft das Programm in einer Endlosschleife.
Wer kann mir da helfen?
ich habe ein Programm geschrieben, welches Spielsteine verschiebt und die höchste Punktzahl ausgibt. Das Programm funktioniert, ist jedoch rekursiv geschrieben und hängt sich bei großen Feldern auf. Ich wollte das Programm nun iterative schreiben. Die einzelnen Elemente werden in die Liste eingefügt, aber er immer das Orginalelement auf und arbeitet damit. Aus diesem Grund läuft das Programm in einer Endlosschleife.
Wer kann mir da helfen?
Java:
public class Iterativmanagement {
private List<KompositumNodeCenter> childComponents = new LinkedList<KompositumNodeCenter>();
Iterator<KompositumNodeCenter> iteratorKomponent = childComponents.iterator();
...
public Iterativmanagement(int[] startfieldid, boolean win, boolean lose,
boolean indifferent, int score, int columns, int lines) {
...
}
public void startoperation() {
for (iteratorKomponent = childComponents.iterator(); iteratorKomponent.hasNext(); )
{
createallFieldconfiguration();
komp = new KompositumNodeCenter(columns, lines);
iteratorKomponent = childComponents.iterator();
komp = iteratorKomponent.next();
win = komp.isWin();
lose = komp.isLose();
indifferent =komp.isIndifferent();
score = komp.getScore();
System.arraycopy(komp.getFieldid(), 0, this.fieldid, 0, komp.getFieldid().length);
}
}
// Erzeuge alle Kombinationen des Feldes
private void createallFieldconfiguration() {
for (int i = 0; i < lines; i++) {
for (int j = 1; j < columns; j++) {
operation(i, j, true);}}
...
}
// setze die Werte des aktuellen Knoten in das Objekt für die einzelnen Operationen
private void setNodeOperationValue() {
...
}
// entscheidet, ob elemet weitere elemente erzeugt oder gewinnt, verliert usw
private void operation(int numberof, int step, boolean movelineorcolumn) {
setNodeOperationValue();
if(!nodeoperation.justemptyfields(movelineorcolumn, numberof))
{
nodeoperation.editfieldid(movelineorcolumn, numberof, step);
if (nodeoperation.checkwin() || nodeoperation.checklose()||nodeoperation.checkindifferent())
...do something, if you won, lose or indifferent...
} else {
nodeoperation.score(this.score);
SaveClass.setScore(nodeoperation.getScore());
if (SaveClass.berechneScore(SaveClass.maxPoint(fieldid), nodeoperation.getScore())) {
createnewNode();
}}}}
// Erzeuge neues Element und füge es an die Liste
private void createnewNode() { // mache Knoten und füge ihn zur Liste
KompositumNodeCenter kn = new KompositumNodeCenter(columns, lines);
kn.setIndifferent(nodeoperation.checkindifferent());
kn.setLose(nodeoperation.checklose());
kn.setScore(nodeoperation.getScore());
kn.setWin(nodeoperation.checkwin());
System.arraycopy(nodeoperation.getfieldid(), 0, copyfieldid, 0, nodeoperation.getfieldid().length);
kn.setFieldid(copyfieldid);
add(kn);
}
...
public void add() {
...
}