gpt4 book ai didi

Java 循环缺少给定数组中的元素

转载 作者:行者123 更新时间:2023-12-01 06:11:36 25 4
gpt4 key购买 nike

我有一个简单的 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());
}
}

现在我已经打印了对象列表,以验证其顺序是否正确,但执行此循环仅输出一个列表,并且似乎错过了对象列表中的前几个项目。这是一个简单的循环,但我一生都无法找出问题所在。

感谢任何帮助!

这里的完成是requirement():

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 循环在调用 clear 方法之前结束。

<小时/>

这就是解决这个问题的方法:

        soln.add(route);
route = new ArrayList<Customer>();

这意味着路由的引用保存在 soln 中,然后在第二行,您存储新实例的变量路由(它不会在您想要存储的路由上调用clear方法)

关于Java 循环缺少给定数组中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33631805/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com