Мой проблемный вопрос, как в практическом курсе, выглядит следующим образом:
Напишите программу на 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, программа работает нормально, но в описании проблемы сказано, что я должен его использовать.
Что я делаю неправильно?
Есть несколько вопросов:
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);
4 / 2 = 2
а остаток равен 0
. Тогда 2 / 2 = 1
а остаток равен 0
. Наконец, 1 / 2 = 0.5
(обратите внимание, что эта операция никогда не выполняется), а остаток равен 1
(этот результат прерывает цикл while), поэтому возвращается предыдущий полученный результат ( 1
).
Ваш в 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);
num
(и неd
), но это единственные переменные, используемые в условииnum%d===0
while
, зависит отnum
иd
. Но ни один из них не изменен в теле в то время как, так что состояние никогда не меняется. Вы, вероятно, хотитеresult = num; while (result%d===0) result=result/d;
,