бесконечный цикл while в JavaScript

1

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

Напишите программу на JavaScript для создания функции, которая принимает 2 целых числа в качестве входных данных. Функция делит первое целое число на второе целое, пока результат (частное) является целым числом (т.е. Остаток равен нулю) и возвращает частное в качестве результата. Ваш выходной код должен быть в формате console.log("Result is", variableName)

И ниже мой код:

var num = prompt("Enter number to divide");
var d = prompt("Enter divisor");

function divide(x, y) {
  var result;
  if (d === 1) {
    result = num;
  } else {
    while (num % d === 0) { //while error
      result = num / d;
    }
  }
  return result;
}
var output = divide(num, d);
console.log("Result is: ", output);

Если я удаляю цикл while, программа работает нормально, но в описании проблемы сказано, что я должен его использовать.

Что я делаю неправильно?

  • 6
    Вы не меняете num (и не d ), но это единственные переменные, используемые в условии num%d===0
  • 3
    В while , зависит от num и d . Но ни один из них не изменен в теле в то время как, так что состояние никогда не меняется. Вы, вероятно, хотите result = num; while (result%d===0) result=result/d; ,
Теги:
while-loop

2 ответа

0
Лучший ответ

Есть несколько вопросов:

1) Если ваша функция получает аргументы x и y, используйте их в своей области видимости, не обращайтесь к глобальным переменным.

2) Вы никогда не меняете переменные, которые оцениваются в условии while, поэтому оценка будет одинаковой, всегда!

3) Еще одна хорошая вещь, которую вы можете сделать, это добавить некоторую проверку полученных аргументов.

Теперь ваш код можно изменить на этот:

function divide(x, y)
{
    if (isNaN(x) || isNaN(y))
        return "Invalid arguments!";

    if (y === 1)
        return x;

    while (x % y === 0)
    {        
        x = x / y;
    }

    return x;
}

var num = prompt("Enter number to divide");
var d = prompt("Enter divisor");
var output = divide(num, d);
console.log("Result is: ", output);
  • 0
    Этот код работает и проходит все тестовые случаи в соответствии с веб-сайтом, но когда я ввожу «num = 4» и «d = 2» во время выполнения, он возвращает результат как «1,00», когда должен возвращать «2,00». То же самое и в некоторых других случаях.
  • 0
    Ну, 4 / 2 = 2 а остаток равен 0 . Тогда 2 / 2 = 1 а остаток равен 0 . Наконец, 1 / 2 = 0.5 (обратите внимание, что эта операция никогда не выполняется), а остаток равен 1 (этот результат прерывает цикл while), поэтому возвращается предыдущий полученный результат ( 1 ).
0

Ваш в while цикл в зависимости от num, но вам не присвоить новое значение к нему после цикла. Это приводит к тому, что условие остается неизменным.

var num = prompt("Enter number to divide");
    var d = prompt("Enter divisor");

    function divide(x, y) {
      var result = x;
      if (y === 1) {
        return result;
      } else {
        while (result % y === 0) {
          result = result / y;
        }
      }
      return result;
    }
    var output = divide(num, d);
    console.log("Result is: ", output);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню