2015-10-15 2 views
-4
for (int j=1; j<path.size(); j++) { 
    //do something 
    for (int z=0; z<path.size(); z++) { 
     //do something 
    } 
    break; 
} 

Внутренний цикл может быть зациклены от 0, пока не достигнет конца размера пути, но внешний цикл только продолжает давать мне j=1 вместо того, чтобы делать инкремент, как среди петли делает.Как сломать внутренний цикл, но цикл все еще увеличивает

Как оба цикла могут делать приращение в одно и то же время? Я пытался удалить break;, но z цикл через path.size().

+0

Я не понимаю ваш вопрос, хотите ли вы дж и г имеют то же значение во все времена? – Hawkings

+0

j от 1 до тех пор, пока не нажмем path.size(), z от 0 до тех пор, пока не нажмем path.size(), поэтому j всегда 1 больше, чем z – ckmss

+1

Правильно, но у вас есть ... Nevermind. Посмотрите на ответ, который только что появился. – user4581301

ответ

2

Попробуйте запустить тестовую программу с и без break

for (int j=1; j<5; j++) { 
    printf("j=%d\n",j); 
    for (int z=0; z<5; z++) { 
     printf("z=%d\n",z); 
    } 
    break; // next time try to remove this break 
} 

и вы можете получить просветленным.

Если вы хотите дж и г быть подсчитаны параллельно, вы можете что-то вроде этого

for (int j=1, z= 1; j<5; j++, z++) { 
    printf("j=%d\n",j); 
    printf("z=%d\n",z); 
} 
2

Внутренний контур полностью выполняет для каждой итерации внешнего цикла, поэтому вы видите z происходит зацикливание path.size() раз. После этого ваш цикл останавливается из-за break, поэтому он не будет повторять второй раз по внешнему циклу. Поэтому, даже если условие внешнего цикла все еще верно, оно даже не проверяет его, так как вы выходите из своего цикла.

1
for(int j = 1 ; j < path.size() ; j++){ 
    do something 
    for (int z = 0 ; z < j ; z++){ 
     do something 
    } 

Я думаю, что это то, что вы ищете

Смежные вопросы