我有一个4个数组列表的保存类来制作ctrl + z
的东西。问题是有时类会返回一个空数组。但是我总是在课堂上给出完整的阵列 - 任何人都可以帮忙吗?我试图找出问题,但我发现的唯一一件事就是当我第一次拨打“addtempsave
”两次,然后拨打“getlastsave
”然后一次“addtempsave
”并且然后一次“getlastsave
”。然后该方法返回空ArrayList
。
这是班级:
package main;
import java.util.ArrayList;
public class Undo {
private ArrayList<ArrayList<Object>> tempsaves = new ArrayList<ArrayList<Object>>();
public Undo() {
}
@SuppressWarnings("unchecked")
public void addtempsave(ArrayList<Integer> mapLetters, ArrayList<Integer> gegnerLetters, ArrayList<Background> bgFinish, ArrayList<Background> bgFinish2) {
ArrayList<Object> save = new ArrayList<Object>();
ArrayList<Integer> ml = (ArrayList<Integer>) mapLetters.clone();
ArrayList<Integer> gl = (ArrayList<Integer>) gegnerLetters.clone();
ArrayList<Background> b1 = (ArrayList<Background>) bgFinish.clone();
ArrayList<Background> b2 = (ArrayList<Background>) bgFinish2.clone();
save.add(0, ml);
save.add(1, gl);
save.add(2, b1);
save.add(3, b2);
if(tempsaves.size() > 100) {
tempsaves.remove(0);
}
tempsaves.add(save);
}
public ArrayList<Object> getlastsave() {
if(tempsaves.size() == 1) {
return tempsaves.get(0);
}
else {
tempsaves.remove(tempsaves.size() - 1);
return tempsaves.get(tempsaves.size() - 1);
}
}
}
这就是我加载旧东西的方式就是这样吗?
mapLetters.clear();
bgFinish.clear();
bgFinish2.clear();
gegnerLetters.clear();
UpdateArrayList tempsave = backwart.getlastsave();
mapLetters = tempsave.ml;
gegnerLetters = tempsave.gl;
bgFinish = tempsave.b1;
bgFinish2 = tempsave.b2;
答案 0 :(得分:0)
tempsaves.remove(tempsaves.size() - 1);//removing it first
return tempsaves.get(tempsaves.size() - 1);//then trying to return this
我认为您需要先将内容保存到某个对象
然后将其删除并返回已保存的内容
答案 1 :(得分:0)
下面的条件是危险的,如果tempsaves为空或size = 1(当第一个元素为空时)将抛出Exception
if(tempsaves.get(tempsaves.size() - 1).isEmpty()) {
return tempsaves.get(tempsaves.size() - 2);
}
一般而言,不是针对空ArrayList
案例进行编码(因为你写的是意料之外的,不应该发生)我会深入挖掘,试图了解导致问题的原因。尝试确定导致问题的输入序列(最后在你尝试做的事情中没有任何不确定性)并从中获取。
另外,我个人也考虑使用Stack
代替ArrayList
,因为它似乎与您要实现的目标相匹配(如果您正在寻找固定大小)堆栈看这里:Creating a fixed-size Stack)。
另外,为了帮助调试你考虑将这4个arraylists包装成一个Update
类,即:
public class Update {
final ArrayList<Integer> ml;
final ArrayList<Integer> gl;
final ArrayList<Background> b1;
final ArrayList<Background> b2;
public Update(ArrayList<Integer> ml, ArrayList<Integer> gl, ArrayList<Background> b1, ArrayList<Background> b2) {
this.ml = (ArrayList<Integer>)ml.clone();
this.gl = (ArrayList<Integer>)gl.clone();
this.b1 = (ArrayList<Background>)b1.clone();
this.b2 = (ArrayList<Background>)b2.clone();
}
}
然后您可以轻松管理Stack<Update>
集合,Update
类本身可以轻松进行单元测试,打印等?