0

有人可以帮我完成这项工作。

我有 3 个数组列表

ArrayList alDeposits = new ArrayList(); 
ArrayList alWithDrawals = new ArrayList(); 
ArrayList alChecks = new ArrayList();

假设所有这三个数组列表都具有 n 长度。现在我的问题是如何使用 for Loop 从这三个 arrayList 中读取 5 条记录,直到最后一个索引。
例如

alDeposits.length = 8; 
alWithDrawals.length = 7; 
alChecks = 13; 

对于第一个 for 循环运行,我将从 alDeposits 获得 5 条记录,并且与 alWithDrawals、alChecks 相同

我将第二次从 alDeposits 获得 3 条记录,从 alWithDrawals 获得 2 条记录,从 alChecks 获得 5 条记录

对于第三次循环运行,我将从 alDeposits、alWithDrawals 获得 0 条记录,从 alChecks 获得剩余的 3 条记录

我不确定我的解释是否清楚。

4

4 回答 4

0

只需维护 3 个柜台即可浏览您的清单

    int i1 = 0;
    int i2 = 0;
    int i3 = 0;
    ArrayList alDeposits = new ArrayList();
    ArrayList alWithDrawals = new ArrayList();
    ArrayList alChecks = new ArrayList();

    do {
        ArrayList<Object> result = new ArrayList<Object>();
        for (int i = 0; i1 < alDeposits.size() && i < 5; i1++) {
            result.add(alDeposits.get(i1));
            i++;
        }
        for (int i = 0; i2 < alWithDrawals.size() && i < 5; i2++) {
            result.add(alWithDrawals.get(i2));
            i++;
        }
        for (int i = 0; i3 < alChecks.size() && i < 5; i3++) {
            result.add(alChecks.get(i3));
            i++;
        }
        //now do something with result
    } while (i1 != alDeposits.size() || i2 != alWithDrawals.size() || i3 != alChecks.size());

关键观察是不要在连续读取之间重置您的计数器i1i2和)。i3

于 2012-10-04T11:40:26.853 回答
0
//You will need to create a 'max(a, b, c)' method, this is pseudo-code
maxSize = max(alDeposits.size(),alWithDrawals.size(),alChecks.size());

//increment index with step=5
for(int index = 0;index < maxSize;index += 5){

    //get 5 records or less
    for(int i=index; i<(index+5) && i<alDeposits.size(); i++)
        alDeposits.get(i);
    for(int j=index; j<(index+5) && j<alWithDrawals.size(); j++)
        alWithDrawals.get(j);
    for(int k=index; k<(index+5) && k<alChecks.size(); k++)
        alChecks.get(k);

}
于 2012-10-04T12:11:57.387 回答
0

在某种程度上你已经回答了你自己的问题,这正是你得到它的方式!!!

首先,您应该使用堆栈或队列而不是数组列表,您可以在其中使用 pop() 和 push()。

然后简单地检查堆栈/队列的大小,如果它大于 = 到 5 pop() 5 次,否则 pop() 0 - stack.size() 次。

如果 stack.size() 已经为零,则移动到下一个堆栈。

于 2012-10-04T11:38:23.097 回答
-1

如果我很好地理解了您的问题,那么对您的问题的一种回答是:

      ArrayList alDeposits = new ArrayList(); 
      ArrayList alWithDrawals = new ArrayList(); 
      ArrayList alChecks = new ArrayList();  
      while (!alDeposits.isEmpty() || !alWithDrawals.isEmpty() || !alChecks.isEmpty()) {
      //get record 5 times until list is empty
        for (int i=0 ; i<5; i++) {
          if (!alDeposits.isEmpty()) {
            alDeposits.remove(0);//get record
          }
          if (!alWithDrawals.isEmpty()) {
            alWithDrawals.remove(0);//get record
          }
          if (!alChecks.isEmpty()) {
            alChecks.remove(0);//get record
          }
        }
      }
于 2012-10-04T11:42:31.603 回答