Ich programmiere gerade das erste mal seit ein paar Jahren wieder mit java (wobei ich auch damals nicht zu tief in die sprache eingetaucht bin).
Hab jetzt ein Problem, zu dem ich keine Lösung gefunden hab, hoffe hier weiß jemand rat. Ist wahrscheinlich ein ziemlicher Anfängerfehler.
Das Problem ist folgendes:
Im nachfolgenden Code ('...' sind code zeilen die ich ausgelassen habe, da sie mit dem problem nichts zu tun haben sollten) werden die saver_black, saver_white, saver_neu der Prozedur übergeben und am Anfang kurz modifiziert.
Danach werden sie nur noch am Anfang der for-Schleife genutzt, um helper_white, helper_black, helper_neu auf ihren Wert zu setzen. Die helper-Variablen werden dann in der for-Schleife weiter bearbeitet und deren Werte geändert.
Leider ändert java dabei auch die Werte von saver_black, saver_white, saver_neu. Das kann ich nicht nachvollziehen, da ihnen nie ein Wert zugewiesen wird. Sie sollten eigentlich ihren Wert behalten, um zu jedem Start eines Durchlaufes der for-Schleife den helper-Variablen ihren Wert zu übergeben.
Kann mir jemand sagen warum die saver-Variablen überschrieben werden, obwohl ihnen nie ein Wert in der Prozedur zugewiesen wird?
Code ist noch recht unschön, hab wie gesagt grad erst wieder angefangen^^
Schon einmal vielen Dank für Antworten
Hab jetzt ein Problem, zu dem ich keine Lösung gefunden hab, hoffe hier weiß jemand rat. Ist wahrscheinlich ein ziemlicher Anfängerfehler.
Das Problem ist folgendes:
Im nachfolgenden Code ('...' sind code zeilen die ich ausgelassen habe, da sie mit dem problem nichts zu tun haben sollten) werden die saver_black, saver_white, saver_neu der Prozedur übergeben und am Anfang kurz modifiziert.
Danach werden sie nur noch am Anfang der for-Schleife genutzt, um helper_white, helper_black, helper_neu auf ihren Wert zu setzen. Die helper-Variablen werden dann in der for-Schleife weiter bearbeitet und deren Werte geändert.
Leider ändert java dabei auch die Werte von saver_black, saver_white, saver_neu. Das kann ich nicht nachvollziehen, da ihnen nie ein Wert zugewiesen wird. Sie sollten eigentlich ihren Wert behalten, um zu jedem Start eines Durchlaufes der for-Schleife den helper-Variablen ihren Wert zu übergeben.
Kann mir jemand sagen warum die saver-Variablen überschrieben werden, obwohl ihnen nie ein Wert in der Prozedur zugewiesen wird?
Code ist noch recht unschön, hab wie gesagt grad erst wieder angefangen^^
Schon einmal vielen Dank für Antworten
Java:
public static double simulation(int testchoice, int whosturn, int mc_par, int[][] new_position, int augenzahl, int[][] positions, Hashtable saver_white, Hashtable saver_black, String[][] saver_neu) {
Hashtable helper_white;
Hashtable helper_black;
String helper_neu[][];
helper_white = new Hashtable();
helper_black = new Hashtable();
helper_neu = new String[game_test.höhe][game_test.breite];
//generates situation if this move is taken
boolean victory = false;
if (whosturn == 1){
...
saver_white.put(augenzahl-1, positions);
String help;
help = saver_neu[new_position[choice][1]][new_position[choice][0]];
saver_neu[new_position[choice][1]][new_position[choice][0]] = "[ ]";
saver_neu[new_position[choice][3]][new_position[choice][2]] = help;
victory = tool.victory_checker(whosturn, positions, new_position, choice);
} else {
...//in dem fall würde bei saver_black das gleiche gemacht wie bei saver_white
}
if (victory == true) { //if this move leads to a winning position, score is set 1.0
return score = 1.0;
}
int whosturn_saver = whosturn + whosturn%2 - whosturn/2;//opponents turn at start of the simulations
for (int i=0;i<mc_par;i++) {
helper_white = saver_white;
helper_black = saver_black;
helper_neu = saver_neu;
...
while ((countdown <game_test.halbzüge_max) && victory == false ){
if (whosturn == 1) {
augenzahl = tool.Würfel(game_test.würfelmax_weiß);
if (helper_white.containsKey(augenzahl-1)) {
int[][] moves = (int[][]) game_test.move_white.get(augenzahl-1);
positions = (int[][]) helper_white.get(augenzahl-1);
new_position = tool.move_checker(positions, moves, helper_neu);
int anzahl_züge = new_position.length;
int choice = mc_zug(anzahl_züge);
helper_white = tool.hash_updater(new_position, positions, augenzahl, whosturn, helper_white, choice);
helper_neu = tool.feld_updater(helper_neu, new_position, choice);
...
}
whosturn = 2; //changes the acting player
} //macht hier das gleiche mit helper_black wie mit helper_white
...
return score;
}