Что происходит в цикле do while с перерывом? - PullRequest
0 голосов
/ 02 июня 2019

Я пытаюсь понять, как работает этот цикл do / while с оператором break. Я думал, что всякий раз, когда выполняется оператор break (первые две итерации, так как условие if является истинным в те времена, но не в третий раз), цикл for экранируется и, следовательно, n не увеличивается. Но строка console.log(`n is ${n}`) logs n is 2 n is 2 n is 5 - как она прыгает с 2 до 5? Я думал, что это будет 3 в третий раз (когда условие if не истинно, поскольку quot равно 60, а 60 % 2 равно 0, и, следовательно, оператор break не выполняется).

  // newArray = [5, 4, 3, 2, 1];

  var quot = 0;
  var loop = 1;
  var n;

  do {
        quot = newArr[0] * loop * newArr[1];
        for (n = 2; n < newArr.length; n++) {
          if (quot % newArr[n] !== 0) {
            break;
          }
        }

        console.log(`n is ${n}`)

        loop++;
   } while (n !== newArr.length);

Вот полный код (решение для freeCodeCamp challenge ):

function smallestCommons(arr) {
  // Sort array from greater to lowest
  // This line of code was from Adam Doyle (http://github.com/Adoyle2014)
  arr.sort(function(a, b) {
    return b - a;
  });

  // Create new array and add all values from greater to smaller from the
  // original array.
  var newArr = [];
  for (var i = arr[0]; i >= arr[1]; i--) {
    newArr.push(i);
  }

  // Variables needed declared outside the loops.
  var quot = 0;
  var loop = 1;
  var n;

  // Run code while n is not the same as the array length.
  do {
    quot = newArr[0] * loop * newArr[1];
    for (n = 2; n < newArr.length; n++) {
      if (quot % newArr[n] !== 0) {
        break;
      }
    }

    console.log(`n is ${n}`)

    loop++;
  } while (n !== newArr.length);

  return quot;
}

// test here
smallestCommons([1,5]);

1 Ответ

0 голосов
/ 02 июня 2019

Длина вашего массива равна 5, поэтому, если ваш оператор if и break не выполняются, тогда n всегда будет 5.

(n = 2; n

В последний раз, когда это выполняется, n=4, n < newArr.length (which is 5), n++ (now n is 5)

Как вы сказали в своем вопросе, «условие if неверно, поскольку quot равно 60, а 60% 2 равно 0, и, следовательно, оператор breakне выполнен "

Ваш оператор break будет служить только для того, чтобы вывести вас из цикла for раньше, если цикл for завершит свой полный цикл, тогда n всегда будет 5.

Надеюсь, чтоимеет смысл!

...