не равно против неравенства внутри для условных циклов - в Java

1

Мой коллега и я только что вступили в дебаты - это возродило воспоминания об университете.

В частности, один из моих преподавателей всегда писал его для таких циклов:

for(int i = 0; i != max; i++){ ... }

Что мне кажется неправильным, потому что у него есть потенциал, чтобы повесить вашу программу в бесконечный цикл, если вы случайно меняете, мой коллега согласен со мной.

Насколько я знаю, наиболее распространенным способом написания петель является:

for(int i = 0 ; i < max; i++){ ... }

Итак, каковы плюсы и минусы каждого подхода?

Теги:
performance
loops
logic
boolean

3 ответа

3
Лучший ответ

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

Если вы решите пропустить значения во время фазы инкремента, или вам не гарантировано точно достичь условия терминала, тогда форма != Приведет к бесконечному циклу.

Пример:

for(int i = 0; i < 10; i += 3) { } // will stop after four iterations

for(int i = 0; i != 10; i += 3) { } // i will exceed 10, and will *not* stop

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

Также хорошо оставаться ясным и понятным относительно того, что вы повторяете, и каковы ваши конечные условия. Если вы укажете a !=, Следующий человек, читающий код, предположит, что вы просто не хотите, чтобы этот номер был частью следующего фрагмента итерации, когда намерение действительно было до него, но не включено.

Ясность здесь важна.

1

Расскажите своему другу: умный человек знает, что помидор - это плод, а не овощ, мудрый человек знает, что вы не ставите помидор в фруктовый салат.

Точка: да, технически он может написать это for(int я = 0; я != max; i++){... } но если другой программист прочитает это, скорее всего, они будут подвергать сомнению причину. Держите его простым и последовательным.

как уже упоминалось: если значение изменяется внутри цикла for, вы можете завершить бесконечный цикл -don.

0

1) Используя первый цикл, представьте, что произойдет, если в какой-то момент внутри цикла вы добавите someting в i чтобы i > max. У тебя просто огромная петля.
Конечно, вы действительно можете выполнить цикл до тех пор, пока i != max но в этом случае while(i != max) легче читать.

Единственный способ, с которым вам хорошо пойти в первом цикле, - это если вы можете как-то гарантировать, что i никогда не превышу max.

2) Второй цикл и более простой for чтения цикл.

3) Что делать, если вы хотите установить max? вы должны править i != max + 1; i++ i != max + 1; i++ в этом случае моя вторая точка удерживается, 2-й цикл легче читать.

  • 3
    Я не думаю, что это будет бесконечно. Это будет только около четырех миллиардов итераций, вот и все.
  • 0
    Если бы у вас была бесконечная память, это было бы.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню