Вложено для цикла внутри цикла while - Java - PullRequest
1 голос
/ 12 августа 2010

Я работал над веб-приложением Java, и у меня было следующее требование в отношении циклов в моей таблице HTML.

У меня есть вложенный цикл for в цикле while (оба выполняют одно и то же числораз, например, скажем 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 ]

9 голосов
/ 12 августа 2010

Похоже, что вы хотите параллельная итерация .

Просто сделайте что-то вроде этого:

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, Item 23: Не используйте необработанные типы в новом коде ).

2 голосов
/ 12 августа 2010

Мне кажется, что вы вообще не хотите вложенного цикла 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)
     }
 }
0 голосов
/ 12 августа 2010

«Вложенный для циклов» не означает «чересстрочный для циклов». Например, говоря:

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++;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...