2015-02-07 2 views
0

Я написал функцию, которая проверяет, существует ли число в интервале. Каков наилучший способ остановить поиск? Этот:Проверить условие в операторе for

for (i = a; i <= b; i++) { 
    fi = f(i); 
    if (fi == c) { 
    j = i; 
    break; 
    } 
} 

или этот?

for (i = a; (i <= b) && (IsFound == 0); i++) { 
    fi = f(i); 
    if (fi == c) { 
    j = i; 
    IsFound = 1; 
    } 
} 
+1

Я согласен с ответами, говорящими «break». Но вы скорее сделаете '! IsFound', чем' IsFound == 0'. – djechlin

ответ

1

Быстрый ответ: break; лучше

Почему, как только разрыв достигается код будет избежать петли. Но во втором выборе вы должны достигнуть for петель условие проверки состояния

Quoting

Оператор пролом прекращает выполнение ближайшего объемлющего делать, для, переключатель, или в то время как заявление, в котором он появляется. Элемент управления переходит к оператору, который следует за завершающим оператором.

В код объяснения

Вариант I

for (i = a; i <= b; i++){ 
    fi = f (i); 
    if (fi == c){ 
    j = i; 
    break; // Simply exit from here , no more continuing 
    } 
} 

Вариант II

for (i = a; (i <= b) && (IsFound == 0); i++) // Need to reach here for exit 
{ 
    fi = f (i);  
    if (fi == c){ 
    j = i; 
    IsFound = 1; // you set flag here but need to continue till for loop condition checking 
    } 
} 
0

Я хотел бы пойти на # 1 путь, потому что:

  • Во втором, вы определили новую переменную isFound и поддерживать ее.
  • Вы добавляете накладные расходы, проверяя переменную isFound для каждого значения i.
  • У вас будет дополнительная проверка и приращение в конце, где из-за переменной isFound вы разрываете цикл for.
-1

Перерыв это лучший способ, чтобы остановить цикл.

Рассмотрите, выполняете ли вы работу после этого условия, у вас есть больше кода. Если вы используете переменную после включения этого условия. Он не выходит из цикла после выполнения.

Если вы используете перерыв. В это время сама петля сломается. Он выходит из цикла.

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