Если ваш цикл заканчивается естественным путем, а не с перерывом, i
будет равным 16. Нет способа избежать этого. Ваш код является вполне приемлемым, если вы хотите, чтобы я в конечном итоге был 15 или менее:
int i;
for (i=0; i<16; i++) {
someClass.someMethod(i);
if (someClass.Test())
break;
}
if (i == 16)
i = 15;
Все, что изменится i
с 16 на 15 после тела цикла, будет:
if (i == 16) i = 15;
i = (i == 16) ? 15 : i;
i = MAX (15,i); /* where MAX is defined :-) */
и т. Д.
Однако это предполагает, что i
будет использоваться для чего-то значимого в качестве постусловия по отношению к этому циклу. Я нахожу, что это редко случается, люди склонны повторно инициализировать его перед повторным использованием (например, другое для цикла).
Кроме того, то, что вы делаете, делает очень трудным (даже невозможным) определение в качестве постусловия, завершается ли ваш цикл нормально или преждевременно завершен, потому что someClass.Test()
вернул true для i == 15
. Это означает, что использование i для принятия дальнейшего решения чревато опасностью.
Мой вопрос: Почему Как вы думаете, вам нужно оставить i
как 15 или меньше?