Попытка упростить JavaScript с помощью var вместо чисел.Я все об этом ошибаюсь? - PullRequest
0 голосов
/ 27 сентября 2018

Я пытаюсь заставить мой FizzBuzz выполнять вычисления с использованием модуля по переменной, чтобы упростить код.Предполагается, что они будут насчитывать до 140, отображая True или False.

Мой предыдущий оператор if выглядит следующим образом (и он работал):

if (i % 3 === 0 && i % 5 === 0)

Пример, который я видел, выглядит следующим образом:

if (checkDivision(iCounter, secondDivisor))

Я создал переменные для счетчика, двух делителей и модуля проверки, но я не могу заставить его работать.

Любая помощь приветствуется, потому что я все еще очень плохо знаком с javascript и кодированиемв общем.

Вот мой код до сих пор:

    function clickAlert2() {
  var firstDivisor = 3;
  var secondDivisor = 5;
  for (var iCounter = 1; iCounter <= 140; iCounter++) {
    var checkDivision =
      iCounter % firstDivisor === 0 || iCounter % secondDivisor === 0;
    if (checkDivision(iCounter, firstDivisor)) {
      document.getElementById("ngList").innerHTML +=
        checkDivision + ". True [3] <br>";
    } else if (checkDivision(iCounter, secondDivisor)) {
      document.getElementById("ngList").innerHTML +=
        checkDivision + ". True [5] <br>";
    } else {
      document.getElementById("ngList").innerHTML +=
        checkDivision + ". False <br>";
    }
  }
}

РЕДАКТИРОВАТЬ ---------------------------------------------------------------------------

Хорошо, теперь моя единственная проблема состоит в том, что числа, которые должны делиться на пять, отображаются как делимые на три, когда явно это невозможно:

    function clickAlert2() {

  function checkDivision(counter) {

    var firstDivisor = 3,
      secondDivisor = 5;

    return (counter % firstDivisor === 0) || (counter % secondDivisor === 0);
  };

  for (var iCounter = 1; iCounter <= 140; iCounter++) {

    if (checkDivision(iCounter)) {
      document.getElementById("ngList").innerHTML +=
        iCounter + ". True [3] <br>";
    } else if (checkDivision(iCounter)) {
      document.getElementById("ngList").innerHTML +=
        iCounter + ". True [5] <br>";
    } else {
      document.getElementById("ngList").innerHTML +=
        iCounter + ". False <br>";
    }
  }
}

Ответы [ 3 ]

0 голосов
/ 27 сентября 2018

Я могу понять из вашего сегмента кода, что вы пытаетесь определить числа от 1 до 140, которые делятся на 3 (firstDivisor) и 5 ​​(secondDivisor).вам нужен цикл, который проходит через 1 -140 и функцию (checkDivision), которая определяет, что данное число является числом, кратным 3 и 5.

function clickAlert2() {

  function checkDivision(counter, divisor) {

    return (counter % divisor === 0);
  };

  var firstDivisor = 3,
    secondDivisor = 5;

  for (var iCounter = 1; iCounter <= 140; iCounter++) {

    //check divsible by both divisors
    if (checkDivision(iCounter, firstDivisor) && checkDivision(iCounter, )) {
      document.getElementById("ngList").innerHTML +=
        iCounter + ". True [" + firstDivisor + " " + secondDivisor + "] <br>";
    }

    //check divible by first divisor
    else if (checkDivision(iCounter, firstDivisor)) {
      document.getElementById("ngList").innerHTML +=
        iCounter + ". True [" + firstDivisor + "] <br>";
    }
    //check divible by second divisor
    else if (checkDivision(iCounter, secondDivisor)) {
      document.getElementById("ngList").innerHTML +=
        iCounter + ". True [" + secondDivisor + "] <br>";
    }
    //cannot divisible either divisors
    else {
      document.getElementById("ngList").innerHTML +=
        iCounter + ". False <br>";
    }
  }
}
0 голосов
/ 27 сентября 2018

Это то, что вы ищете?

function clickAlert2() {
    var firstDivisor = 3;
    var secondDivisor = 5;
    var checkDivision = function (counter, divisor) {
        return counter % divisor === 0;
    };

    for (var iCounter = 1; iCounter <= 140; iCounter++) {
        if (checkDivision(iCounter, firstDivisor)) {
            document.getElementById("ngList").innerHTML +=
                iCounter + ". True [3] <br>";
        } else if (checkDivision(iCounter, secondDivisor)) {
            document.getElementById("ngList").innerHTML +=
                iCounter + ". True [5] <br>";
        } else {
            document.getElementById("ngList").innerHTML +=
                iCounter + ". False <br>";
        }
    }
}
clickAlert2()
<div id="ngList"></div>
0 голосов
/ 27 сентября 2018

Ваш checkDivision является логической переменной, а не функцией.Таким образом, вы просто передаете его как выражение в операторах if и else if.

if(checkDivision){.....}

Кроме того, для fizzbuzz вы можете создать такую ​​функцию:

function fizzbuzz(num){
  if(num % 3 === 0 && num % 5 === 0)
     return "FizzBuzz";
  else if(num % 3 === 0)
     return "Fizz";
  else if(num % 5 === 0)
     return "Buzz";
  else return "none";
}

Теперь вы можетесравните строку, возвращаемую этой функцией, чтобы точно знать, является ли она fizz, Buzz или fizzbuzz

...