Beshere
@Beshere
Инженер-программист

Бесконечный цикл или ненужная за циклом переменная?

Время от времени встречаюсь с задачами, где надо крутить внутри цикла переменную и завершать цикл, когда она достигнет определенного значения. Есть два варианта реализации этого алгоритма:

1. Бесконечный цикл с выходом внутри
do {
 int myVar = getVar();
 // логика работы с myVar
 if (myVar <= 0)
 break;
} while (true)

Переменная сидит в своём скоупе, вычисление занимает одну строку, но бесконечный цикл выглядит страшновато, выход из него где-то в середине не очевиден.

2. Цикл с условием:
int myVar = getVar();
while(myVar > 0) {
 // логика работы с myVar
 myVar = getVar();
}

Цикл не выглядит бесконечным, выход очевиден. Но переменная myVar совершенно не нужно маячит за пределами цикла, строк её вычисления две штуки.

Какой алгоритм вы предпочтете? Почему?
  • Вопрос задан
  • 282 просмотра
Решения вопроса 3
Zoominger
@Zoominger
System Engineer
1. Бесконечный цикл с выходом внутри

This. Волков бояться - в лес не ходить, не бойтесь принимать ответственность.
Боитесь бесконечных циклов - не используйте их. А бояться их не надо, если вы всё написали правильно, то ничего страшного не произойдёт.
Ответ написан
zagayevskiy
@zagayevskiy Куратор тега Java
Android developer at Yandex
for (int myVar = getVar(); myVar > 0; myVar = getVar()) { /* do it */ }
Ответ написан
@alekseyHunter
Охотник за знаниями
бесконечный цикл выглядит страшновато

Он будет вселять страх, если Вы у вас вместо инкремента будет декремент, а значит цикл точно будет бесконечным.

Мой выбор за бесконечным циклом, понравились метки на ассемблере (нет) и ,конечно, goto на Си)

Для второго цикла нужно искать объявление переменной, а это не всегда можно объявить ее перед блоком.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Karpion
В данном случае надо использовать не цикл-с-предусловием "while ...", а цикл-с-постусловием "repeat ... until" (иногда его пишут как "... while" или "do ... while", но условие стоит в конце цикла).
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы