在while循环中嵌套for循环 - Java

时间:2010-08-12 16:26:05

标签: java loops

我正在开发一个Java Web应用程序,并且在我的HTML表中循环时有以下要求。

我在while循环中有一个嵌套的for循环(两者都执行相同的#次,例如3)。

我的代码看起来像这样:

<table>
<thead>...</thead>
<tbody>

    if (patcases != null && patcases.size() > 0) {
                Iterator itr1 = patcases.iterator();
                while (itr1.hasNext()) {
                    ..some code here..

                    System.out.println("DA Email from webpage..."+da.getEmail());
                       int rCount = 0;  
       <tr>                
                       for(int i=0;i<passedValues.length; i++){

                         ...some code here..
       </tr>

                       System.out.println("Printed row..." +rCount);
                rCount ++;
} /*closing of for loop */
}/*closing of while loop */
}/* closing of if loop */
</tbody>
</table>

现在,通过这种类型的循环结构,我在控制台上获得了以下内容:

DA电子邮件来自网页... abc@abc.com
印刷行... 0
印刷行... 1
印刷行... 2
DA来自网页的电子邮件... xyz@xyz.com
印刷行... 0
印刷行... 1
印刷行... 2
DA电子邮件来自网页... 123@123.com
印刷行... 0
印刷行... 1
印刷行... 2

但我想要的输出类型如下:
DA来自网页的电子邮件... abc@abc.com
印刷行... 0
DA来自网页的电子邮件... xyz@xyz.com
印刷行... 1
DA电子邮件来自网页... 123@123.com
印刷行... 2

我将如何做到这一点?
任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:9)

看起来你想要并行迭代

简单地做这样的事情:

Iterator<?> iter1 = ...;
Iterator<?> iter2 = ...;             // or: int index = 0;

while (iter1.hasNext() &&
           iter2.hasNext()) {        // or: index < MAX

   Object item1 = iter1.next();
   Object item2 = iter2.next();      // or: index++;

   doSomething(item1, item2);        // or: doSomething(item1, index);

}

// perhaps additional handling if one ran out before the other

请注意,如果可能的话,您应该使用参数化类型而不是原始类型( Effective Java 2nd Edition,第23项:不要在新代码中使用原始类型)。

答案 1 :(得分:2)

在我看来,你根本不需要嵌套的for循环。你只想要一个在while循环中递增的计数器:

if (patcases != null && patcases.size() > 0) {
     Iterator itr1 = patcases.iterator();
     int index = 0;
     while (itr1.hasNext()) {
         ..some code here..
         System.out.println("DA Email from webpage..."+da.getEmail());
         if (index < passedValues.length) {
             System.out.println("Printed row..." + index);
         } else {
             // Hmm, didn't expect this...
             // (Throw exception or whatever)
         }
         index++;
     }
     if (index != passedValues.length) {
         // Hmm, didn't expect this...
         // (Throw exception or whatever)
     }
 }

答案 2 :(得分:0)

“嵌套for循环”并不意味着“隔行循环”。例如,说:

for (i = 0; i < 3; i++) {
    print("i: " + i);

    for (j = 0; j < 3; j++)
        print("\tj: " + j);
}

打印以下内容:

i: 0
    j: 0
    j: 1
    j: 2
i: 1
    j: 0
    j: 1
    j: 2
i: 2
    j: 0
    j: 1
    j: 2

您似乎想要的是:

i: 0
    j: 0
i: 1
    j: 1
i: 2
    j: 2

不是嵌套for循环,而是在同一循环中使用单独的计数器:

j = 0;

for (i = 0; i < 3; i++) {
    print("i: " + i);

    print("\tj: " + j);
    j++;
}