Многое зависит от конкретных обстоятельств. Но в вашем примере вы хотите обойти массив ограниченной длины, а использование цикла for позволяет легко это сделать и избежать выхода за пределы. В вашем примере цикла while вы должны сделать свое собственное приращение - что может быть проблематично, если вы хотите использовать оператор continue
для перехода к следующему циклу - и создать более сложное условное выражение (которое, кстати, есть ошибка, я думаю, вы имели в виду && i != arrayLen
). Вам просто нужно сделать дополнительный код для достижения эффекта, который обеспечивает цикл for.
Конечно, некоторые пуристы будут утверждать, что break
и continue
не должны использоваться и что вы должны использовать переменные if-else и булевы переменные, если это необходимо, а не продолжать или прерывать цикл. Но я думаю, что это может сделать цикл более уродливым, особенно если он относительно короткий и его легко понять, как в этом примере. Для цикла с гораздо более длинным кодом, в котором разрыв или продолжение можно легко скрыть от внимания, пуристический подход может быть более понятным, поскольку цикл уже сложен для понимания в этом случае. Но вы всегда можете сделать это как часть цикла for, просто добавьте его как часть условия.
Лучше также проверять массив, связанный с i < arrayLen
, а не на точное равенство, в случае, если что-то заставило i
пропустить точное значение (я действительно видел, что это произошло в ошибке Y2K, которая могла иметь избегал лучшей практики).