有没有办法增加java中的for循环范围?我有以下代码:
for (DataRoot bri : Ri)
{
for (DataRoot brcom : complemento)
{
if (bri.getMesa().equals(brcom.getMesa()))
{
if (found) {found = false; break;}
postrecom = brcom.getOrden().getPostres();
Calendar dateri = Calendar.getInstance();
Calendar datecom = Calendar.getInstance();
dateri.setTime(bri.getFechaorden());
for (Postres proc : postrecom)
{
// if (found) {found = false; break;}
datecom.setTime(proc.getHora_plato());
long diff = datecom.getTimeInMillis() - dateri.getTimeInMillis();
if ( diff > (3*60*1000))
{
found = true;
Ri.add(brcom);
break;
}
else
{
bri.getOrden().getPostres().add(proc);
setBase();
}
}
}
}
}
正如您所注意到的,如果满足某些条件,Array" Ri"哪个是主数组会增加它的内容,比如从3个项目到4个,在开始时,循环将从0到2但是因为它有一个新元素我需要它从0到3运行但是随着新项目的添加,范围不会动态增加。
我可以算一下我添加了多少项" Ri"所以我可以多次调用这个方法但是如果我这样做,编译器会给我" java.util.ConcurrentModificationException"在这一点上的错误我不知道该怎么做任何帮助将不胜感激。
答案 0 :(得分:0)
我可能错了,但是根据您给出的解释和您编写的代码,您尝试获取complement
项目,然后将其添加到Ri
列表(如果不存在)。
假设Ri的数据结构是ArrayList,我接近的方式是,首先我会获得所有complement
项。然后循环遍历补码项,并为每个补充项循环遍历整个Ri值并设置一个布尔值,如果相关值适合添加如下:
for(dataBri brCom : complemento) {
boolean shouldAdd = false;
for (DataBri bri : Ri) {
if(someConditionMet) {
shouldAdd = true;
}
if (shouldAdd) {
Ri.add(brCom);
}
}
我希望这是有道理的。
答案 1 :(得分:0)
我是相对较新的Java开发人员,看起来好像你做的循环类型For-each喜欢
for (Arraylist arraylist : size)
{
....
}
假设您的初始大小为2,意味着该数组包含2个元素,IF在此过程中向元素添加元素,大小不会动态改变但是如果你去旧的
for (int i = 0; i < Arraylist.size(); i++)
{
....
}
并且在向数组中添加元素的过程中,当您向数组中添加新元素时,动态地重新计算循环的大小,在我的情况下,解决我的问题。