Сколько раз с итерацией следующего цикла? - PullRequest
0 голосов
/ 20 октября 2019

] 1

мой одноклассник думает, что это 10, я знаю, что это 11. Я не могу объяснить это должным образом, так что кто-нибудь хочет дать ему шанс?

Переменнаяначинается с 10. Каждый раз, когда он проходит, он уменьшается на единицу, и цикл завершается, когда x не больше 0. Поэтому, когда x становится 0, цикл завершается. так бывает с 10 до 0. Это 11 раз.

Ответы [ 2 ]

2 голосов
/ 20 октября 2019

Это, вероятно, больше, чем вы хотите знать, но здесь вы идете.

Ваш пример ничем не отличается от for (x = 10; x < 0; x--);

Большинство циклов имеют начало, конец и приращение. (Я не скажу all loops, потому что кто-то придумает неясный пример, чтобы доказать, что я не прав).

При использовании циклов for необходимо рассмотреть два случая.

  1. for (x = начало; x <= конец; x + = inc);// Я называю это закрытым </p>

  2. 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 цикла.

0 голосов
/ 20 октября 2019

Следующий цикл повторяется ровно 10 раз, печатая значение x от 10 до 1. Цикл прекращает цикл, когда x = 0, потому что 0 не больше 0. Этот процесс уменьшения происходит в x-- после того, как программа зациклилась 10 раз. Поскольку цикл повторяется ровно 10 раз, сначала выводится значение x, затем оно уменьшается в 1, 10 раза. Таким образом, в итоге, конечное значение x равно 0, а последнее значение x , которое печатается , равно 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...