![](/img/trans.png)
[英]How to find the Missing Elements in a given sequence array list using java?`
[英]Java loop missing elements in given array
我有一个简单的for
循环,它遍历对象的ArrayList
。 每次它检查添加当前对象是否会增加列表 x 的总数超过容量。 如果未达到或超过容量,则将对象添加到列表 x,否则,将列表 x 添加到 x 的另一个列表 y,清除列表 x,然后添加当前对象。
List<Customer> route = new ArrayList<Customer>();
for(Polar s:polars) {
if((requirment(route) + s.getCustomer().c) <= prob.depot.c) {
route.add(s.getCustomer());
} else {
soln.add(route);
route.clear();
route.add(s.getCustomer());
}
}
现在我已经打印了对象列表以验证它的顺序是否正确,但是执行此循环仅输出一个列表,并且似乎错过了对象列表中的前几项。 它是一个简单的循环,但我一生都无法弄清楚出了什么问题。
任何帮助表示赞赏!
为了完成这里是requirment()
:
public int requirment(List<Customer> route) {
int r = 0;
if(route.isEmpty() == true) return 0;
for(Customer cust : route) {
r = r + cust.c;
}
return r;
}
我想这是 soln 的定义:
List<List<Customer>> soln = new ArrayList<List<Customer>>();
在 Java 中,非原始类型将数据存储在内存中,变量引用它们。 因此,列表中的每一项都引用了内存中某处的一条路线。
当你这样做时
soln.add(route);
route.clear();
您将某个路由的引用添加到 soln 中,然后在存储在 soln 中的同一实体上调用 clear 方法。 最后一个列表不会被擦除,因为 for-cycle 在调用 clear 方法之前结束。
这是你解决这个问题的方法:
soln.add(route);
route = new ArrayList<Customer>();
这意味着路由的引用保存在 soln 中,然后在第二行中,存储新实例的变量路由(它不会在要存储的路由上调用 clear 方法)
如果 soln 是List<Customer>
对象,那么您只想复制到路由的内容。 只需使用
soln.addAll(route);
代替
soln.add(route);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.