Ich versuche, einen 3x3-Quadrat-Verschiebungs-Puzzle-Löser in Java zu schreiben. Allerdings hänge ich bei dem Teil fest, bei dem ich die Blöcke verschiebe - mit dem Algorithmus, den ich verwendet habe, habe ich immer wieder neue leere Felder erhalten. Nach einigen Tests habe ich herausgefunden, dass es daran liegt, dass trotz meiner Verwendung des Befehls clone() das Array von v immer noch beeinflusst wird, wenn ich "current" ändere. Weiß jemand, warum das so ist und wie ich es beheben kann? Ich dachte, dass ich nach der Verwendung von clone das neue Array ändern könnte, ohne das alte zu beeinflussen.
if (!rightwall)
{
int[][] current = v.state.clone();
current[x][y] = current[x][y + 1];
current[x][y + 1] = 0;
State w = new State(current);
w.distance = v.distance + 1;
w.path = v;
System.out.println("Right Shift:");
w.print();
q.insert(w);
}
State ist eine Klasse, die ein zweidimensionales Array zusammen mit einigen Eigenschaften darstellt - der erste Teil des Codes für State lautet
public class State {
int[][] state = new int[3][3];
int distance = 0;
boolean known = false;
State path = null;
State(int[][] newstate){
state = newstate.clone();
}
v ist der Zustand, der die aktuelle Position repräsentiert. w wäre dann eine "benachbarte" Position, die nach dem Tausch des leeren Raums mit dem daneben liegenden Raum entsteht.
q ist eine Warteschlange.
0 Stimmen
Was ist
v
? Was istState
? Was istq
? Dieser Code hat ohne diesen Kontext keine Bedeutung.