2014-09-18 3 views
1

Последующие этой страницы: Breaking out of nested loops in JavaВырвавшись из вложенных циклов в Java перевождь

Этот код прекрасно работает (часть решатель судоку, так что р является 9x9 стол):

int r = 0, c = 0; 
out: 
for(r = 0; r < 9; ++r){ 
    for (c = 0; c < 9; ++c){ 
    if (p[r][c] == 0){ 
     break out; 
    } 
    } 
} 
// do stuff with r, c 

Но этот код не работает! Единственное изменение состоит в том, что секции init для циклов for пусты.

int r = 0, c = 0; 
out: 
for(; r < 9; ++r){ 
    for (; c < 9; ++c){ 
    if (p[r][c] == 0){ 
     break out; 
    } 
    } 
} 
// processes first row of array as it should, then breaks out with r=9, c=9 

С r и c определены и инициализированы над петлями, эти блоки должны делать то же самое, но они этого не делают. Кто-нибудь может подумать, почему это ведет себя так, как это происходит?

+1

ваш внутренний цикл выполняется только один раунд внешнего контура. то он никогда не удовлетворяет оценке c <9. Вероятно, вам нужно посмотреть «область переменных» в java и ее влияние. – Jimmy

ответ

3

Да, проблема в втором цикле требует, чтобы c был сброшен до 0, или он будет работать только для первой итерации внешнего контура. Второй раз (например, когда r = 1) c уже будет 9, и тело петли не будет введено. Итак, вам нужно

for (c = 0 ; c < 9; ++c){ 

или,

for(; r < 9; ++r){ 
    c = 0; 
+0

Ничего себе, теперь я чувствую себя очень глупо. Благодаря! –

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