所以我正在编写一个算法来找到问题的所有解决方案,每当我找到一个更好的解决方案时,我用我的Solutions对象中的解决方案覆盖当前列表,每次我找到一个平等的解决方案,我想添加它在我的解决方案列表中。
问题是在我的输出中我得到了6次相同的解决方案,我想这是因为我正在复制引用而不是添加原始解决方案。
我发现了一个看起来像我的问题的帖子(problem with ArrayList in Java),但我尝试了他们在那里做的事情,但它并没有解决我的问题。
所以我尝试了不同的东西,这是我想出的最好的东西。这是我调用的方法,将当前解决方案与解决方案对象中当前的解决方案一起添加到列表中。这有点长,我做了一些不必要的事情,我只是想解决我的问题。
ArrayList<Integer> horstreets;
ArrayList<Integer> verstreets;
public ArrayList<StreetPlan> addCurrentPlan(Solutions sol) {
ArrayList<StreetPlan> plan = new ArrayList<>();
ArrayList<Integer> h = null;
ArrayList<Integer> v = null;
//copy all the previous answers
for (StreetPlan a : sol.getStreetPlans()) {
h= new ArrayList<>();
for (Integer b : a.getHorizontalStreets()) {
Integer c=b.intValue();
h.add(c);
}
v = new ArrayList<>();
for (Integer b : a.getVerticalStreets()) {
Integer c=b.intValue();
v.add(c);
}
plan.add(new MyStreetPlan(h, v));
}
//add new solution
h= new ArrayList<>();
v= new ArrayList<>();
for (Integer b : horstreets) {
int c= b.intValue();
h.add(c);
}
for (Integer b : verstreets) {
int c= b.intValue();
v.add(c);
}
plan.add(new MyStreetPlan(h, v));
return plan;
}
这就是我打电话给新街道计划的方法,只添加当前(因此更好)的解决方案。
public ArrayList<StreetPlan> setBetterPlan() {
ArrayList<StreetPlan> plan = new ArrayList<>();
ArrayList<Integer> h = null;
ArrayList<Integer> v = null;
h= new ArrayList<>();
v= new ArrayList<>();
for (Integer b : horstreets) {
int c= b.intValue();
h.add(c);
}
for (Integer b : verstreets) {
int c= b.intValue();
v.add(c);
}
plan.add(new MyStreetPlan(h, v));
return plan;
}
对不起,如果我发帖有点长,我只是希望它清楚。抱歉我的英语:p
修改 我知道这个方法代码很多,但如果我这样做的话
ArrayList<StreetPlan> plan = new ArrayList<>();
plan.add(new MyStreetPlan(horstreets,verstreets));
sol = new MySolutions(Bcost, Hstreets, plan);
添加更好的解决方案,并添加一个平等的计划:
ArrayList<StreetPlan> plan = new ArrayList<>();
plan.add(new MyStreetPlan(horstreets,verstreets));
plan.addAll(sol.getStreetPlans());
sol = new MySolutions(Bcost, Hstreets, plan);
我的输出只是一些白线(因为在我的算法horstreets
和verstreets
的末尾只有两个空列表)