Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ich möchte eine Klasse schreiben die meine gemachten schritte in einem Programm anhand von 4 Array Listen abspeichert. also ich ruf nach jeden schrit die methode auf und speicher in ihr die Array Listen bis zu 100 stück und wenn man dan z drückt soll der letzte schritt rückgängig gemacht werden:
Java:
package main;
import java.util.ArrayList;
public class Undo {
private ArrayList<ArrayList> tempsaves = new ArrayList<ArrayList>();
public Undo() {
}
public void addtempsave(ArrayList<Integer> mapLetters, ArrayList<Integer> gegnerLetters, ArrayList<Background> bgFinish, ArrayList<Background> bgFinish2) {
ArrayList save = new ArrayList();
save.add(0, mapLetters);
save.add(1, gegnerLetters);
save.add(2, bgFinish);
save.add(3, bgFinish2);
if(tempsaves.size() > 100) {
tempsaves.remove(0);
}
tempsaves.add(save);
}
public ArrayList getlastsave() {
tempsaves.remove(tempsaves.size() -1);
return tempsaves.get(tempsaves.size() - 2);
}
}
Das problem ist das die Methode getlastsave nur lehre bzw falsche array Listen zurück giebt wenn ich rückgängig machen will werden die ArrayListen nur gecleart aber bleiben leer.
ja klar hab ichs augeführt deswegen weiß ich ja das die array listen leer bleiben. und nein die array listen werden nur befor sie neu eingelsen werden überschrieben.
Wenn du den letzten Save zurückgibst, dann löschst du erst das letzte Element und gibst dann das vorletzte zurück.
Also:
IIIIIIIIII letztes löschen
IIIIIIIII vorletztes zurückgeben
IIIIIIIiI
nein die Mthode .size() giebt einen mehr zurück als wikrlich in der liste ist dah ja 0 auch ein speicherplatz ist und .size bei 1 anfängt deswegen ist es das letzte das vorletzte. aber das ist ja nicht das problem!
IIIIIIIiI du willst das kleine i zurückgeben
IIIIIIiII du gibst das kleine i zurück.
Führ doch mal das Speichern schrittweise aus. Dann guckst du nach, ob die richtigen Daten in der ArrayList stehen. Und dann guckst du nach, ob die richtigen Werte zurückgegeben werden.
ja ok da hast du recht aber das war nicht das wikrlich wichtige problem. Ich krich einfach leere Arrays zurück obwohl ich volle reingebe ?! das ist das problem
Also das Problem liegt zwischen dem abspeichern mit der Klasse und dem auslesen. Wenn ich sie reinspeicher sind sie erst drinn aber wenn ich sie denn raus haben will ist das hanze oberarray leer.
Also ist die ArrayList, in der alle Saves gespeichert werden sollen leer? Es gibt eine Variable, die glaube ich changeLog heißt. Die wird bei jeder Veränderung um einen inkrementiert. Guck mal nach, ob die den richtigen Wert beinhaltet.
EDIT: Wenn der Wert höher ist, ist das ein Indikator dafür, dass die Werte gelöscht werden.
Ist er geringer, kommen wahrscheinlich keine Änderungen in der ArrayList an.
Ist er richtig fügst du NullPointer hinzu.
changlog ? find ich nicht! und ja es muss ja ein probelm beim speichern sein ?! gelöscht wirt ja eig nichts also wirt es eher ergegendwo falsch gespeichert also falscher code bei mir aber wo?
Ok der fehler den du eig hättest sehen können war das ich ja die referenz auf das objekt übergeben habe so wenn ich am objekt was ändere wurde das mit in die klasse undo gepackt lösung ist jetzt nur clone der Array list an undo zu übergeben
Ich bin aber eher aus dem Lager "Gib den Menschen kein Brot sondern zeige ihnen, wie man Getreide anbaut." und du hast soeben ein ganzes Feld voll damit.
Ich muss zugeben, ich habe es nicht gesehen, obwohl ich dasselbe Problem schon mal hatte aber du hast wesentlich mehr gelernt. Dinge, die dir ganz sicher helfen werden.
Da hast du wohl recht aber eig geht der spruch etwas anders: " gieb einem Menschen einen Fisch und du ernärst ihn für einen Tag, lehre einen Menschen zu Fischen und du ernährst in sein Leben lang"