在Java中动态更改for循环范围

时间:2017-03-08 02:25:24

标签: java android

有没有办法增加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"在这一点上的错误我不知道该怎么做任何帮助将不胜感激。

2 个答案:

答案 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++)
    {
      ....
    }

并且在向数组中添加元素的过程中,当您向数组中添加新元素时,动态地重新计算循环的大小,在我的情况下,解决我的问题。