Это, вероятно, больше, чем вы хотите знать, но здесь вы идете.
Ваш пример ничем не отличается от for (x = 10; x < 0; x--);
Большинство циклов имеют начало, конец и приращение. (Я не скажу all loops
, потому что кто-то придумает неясный пример, чтобы доказать, что я не прав).
При использовании циклов for необходимо рассмотреть два случая.
for (x = начало; x <= конец; x + = inc);// Я называю это закрытым </p>
for (x = start; x
Для замкнутого цикла число раз вычисляется следующим образом:
(end-start)/inc + 1
Разомкнутый цикл более сложен в этом1 должно быть вычтено из end
, чтобы сделать его циклом closed
. Это может быть вычислено как
(end-1-start)/inc + 1
Это также работает, если вы измените позиции start
и end
и сделаете decrement
приращения.
В вашем случае этобудет (10 - 1 - 0) / 1 + 1 = 10.
А вот тестовый код, с которым можно поиграть, чтобы проверить каждый тип петли.
public static void main(String[] args) {
Random r = new Random();
for (int t = 0; t < 10_000; t++) {
int realCountClosed = 0;
int realCountOpen = 0;
int start = r.nextInt(10);
int end = r.nextInt(30) + 11;
int inc = r.nextInt(4) + 1;
for (int i = start; i <= end; i += inc) {
realCountClosed++;
}
for (int i = start; i < end; i += inc) {
realCountOpen++;
}
int computedCountClosed = (end - start) / inc + 1;
int computedCountOpen = ((end - 1) - start) / inc + 1;
if (realCountClosed != computedCountClosed) {
System.out.println(
"Closed: " + realCountClosed + " " + computedCountClosed);
}
if (realCountOpen != computedCountOpen) {
System.out.println(
"Open: " + realCountOpen + " " + computedCountOpen);
}
}
}
Одна заключительная нота,В циклах for pre
или post
приращение (т.е. - или ++) значений не влияет на цикл. Это не относится к циклам while
, если приращение выполняется в части while
цикла.