Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
您能在Java上操纵For-Each循环以重复一次迭代吗?_Java_Arraylist_Foreach_Iteration - Fatal编程技术网

您能在Java上操纵For-Each循环以重复一次迭代吗?

您能在Java上操纵For-Each循环以重复一次迭代吗?,java,arraylist,foreach,iteration,Java,Arraylist,Foreach,Iteration,我必须做到以下几点: 1.-从数据库中读取一些行(可能超过1行)。 2.-用数据填充ArrayList。 3.-每次使用一行数据调用WebService。 4.-如果任何一行的传输出现问题,请再尝试3次 问题是我使用For-Each循环来设置数据,我不知道是否可以在该循环上重复一次迭代 我正在考虑使用常规For循环,如中所述: 但我有两个问题:我如何才能得到正确的方法来获得我的案例中的“长度”在我的案例中,我必须使用括号[i] 我应该重新排列代码吗 以下是我的代码简介: ArrayList<

我必须做到以下几点:

1.-从数据库中读取一些行(可能超过1行)。
2.-用数据填充ArrayList。
3.-每次使用一行数据调用WebService。
4.-如果任何一行的传输出现问题,请再尝试3次

问题是我使用For-Each循环来设置数据,我不知道是否可以在该循环上重复一次迭代

我正在考虑使用常规For循环,如中所述: 但我有两个问题:
我如何才能得到正确的方法来获得我的案例中的“长度”
在我的案例中,我必须使用括号[i]

我应该重新排列代码吗

以下是我的代码简介:

ArrayList<SomeBean> v = new ArrayList<SomeBean>();

while(index < 1000) 
{   
    //Read some data from DB

    //Fill the arraylist

    for(SomeBean s : v)
    {
        if (repeat == 0)
        {
            //Use the Data of the current iteration to invoke Webservice
            String column1 = s.getColumn1();
            String column2 = s.getColumn2();
            String column3 = s.getColumn3();
            ...
        }
        else
        {
            //Don´t use the Data of current iteration, try again with the same data
        }

        try 
        {
            //Invoke WebService and send the data

            if (answer == OK)
            {
                //Print OK
            }
            else
            {
                //Print NOT OK
            }
        }                       
        catch (Exception) 
        {
            //Print the Exception
            repeat++;

           if (repeat > 3)
           {
            repeat = 0; //Go to read a new group of data
            index++;
           }                   
        }
    }
}
ArrayList v=new ArrayList();
而(指数<1000)
{   
//从数据库中读取一些数据
//填写数组列表
for(SomeBean s:v)
{
如果(重复==0)
{
//使用当前迭代的数据调用Webservice
字符串column1=s.getColumn1();
字符串column2=s.getColumn2();
字符串column3=s.getColumn3();
...
}
其他的
{
//不要使用当前迭代的数据,请使用相同的数据重试
}
尝试
{
//调用WebService并发送数据
如果(回答==确定)
{
//打印OK
}
其他的
{
//打印不正常
}
}                       
捕获(例外)
{
//打印异常
重复++;
如果(重复>3)
{
repeat=0;//转到读取一组新数据
索引++;
}                   
}
}
}

这是递归的完美任务。这里的想法是,如果逻辑中发生错误,并且尝试次数超过预定限制,则失败。否则,它会通过递归调用自己来重试

// Our class variables
private int attempts = 0, limit = 3;

// A method to call our recursive method for the first time.
void BeginProcessing()
{
     ProcessData();
}

// Our recursive method containing our read logic.
void ProcessData()
{
    try
    {
        /* Insert read logic here. */
    }
    catch(Exception)
    {
        attempts++;

        if (attempts<=limit)
        {
            ProcessData();
        }
        else
        {
            System.out.println("Attempted to process " + limit + " times.");        
        }
    }
}
//我们的类变量
私有整数尝试=0,限制=3;
//第一次调用递归方法的方法。
void BeginProcessing()
{
ProcessData();
}
//包含读取逻辑的递归方法。
void ProcessData()
{
尝试
{
/*在此处插入读取逻辑*/
}
捕获(例外)
{
尝试++;

如果(尝试在for each循环中必须有另一个循环才能重复。更好的方法是使用单独的方法调用Web服务,并在出现错误时重试
n
次。从父循环中为每个循环调用该方法一次。这样,如果要更改重试机制等,可以在单独的方法中执行。Thanks@Nivas,我在try and catch中添加了另一个循环。这并不优雅,但解决了问题。这是一个很好的方法,但我必须对代码进行太多的重新排列。谢谢。如果你不关心效率,对你的问题发表评论的人可以工作-添加另一个循环。但是,如果你有额外的时间,我会高度推荐nd尝试实现这个递归解决方案,因为它的大O是O(n),比您当前的O(n^3)三重嵌套循环解决方案效率高三倍。尽管我完全尊重您不将其标记为“正确”的决定回答:既然你现在不打算使用它,那么为将来试图用谷歌搜索类似解决方案的开发者标记它可能是明智的。祝你好运,Omnus RuthiusNo问题!祝你好运。