Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Не работает функция в JavaScript

Yury Chebunin Ученик (138), на голосовании 4 года назад
"Случайное число от min до max"
Встроенный метод Math.random() возвращает случайное число от 0 (включительно) до 1 (но не включая 1)

Напишите функцию random(min, max), которая генерирует случайное число с плавающей точкой от min до max (но не включая max).

Пример работы функции:

alert( random(1, 5) ); // 1.2345623452
alert( random(1, 5) ); // 3.7894332423
alert( random(1, 5) ); // 4.3435234525

Мне не нужно решение этой задачи, не подсказывайте, пожалуйста
Единственное, подскажите, почему не работает моя функция?
Вот код:

"use strict"

function random(min, max) {

let value = Math.random();

if (value >= min && value < max) {
return value;
} else {
random(x, y);
}
}

let x = +prompt('Введите минимальное значение от [0 до 1)', '');

let y = +prompt('Введите максимальное значение от [0 до 1)', '');

alert(random(x, y));
Голосование за лучший ответ
Иван Сигаев Искусственный Интеллект (156926) 5 лет назад
Ну как не подсказывая показать ошибку ?
random(x, y);
замени на
return random(x, y);

Хотя это не решение задания, но твоя программа уже будет работать
Yury ChebuninУченик (138) 5 лет назад
Большое спасибо, а можно еще немного поподробнее?
В чем отличие? То есть, я понимаю, что он возвращает результатом функцию, которая "запускается снова", если условие не выполняется.
Но можно описать мою ошибку подробнее? Почему так не работает и что происходит в моем случае по шагам? Буду очень благодарен )
Иван Сигаев Искусственный Интеллект (156926) Отладчиком пройдись
Elepsis Eclipse Гений (67331) 5 лет назад
function random(min, max) {
  let value = Math.random();

  if (value >= min && value < max) {
    return value;
  } else {
    random(x, y);
  }
}

alert( random(0.1, 0.5) );

Интерпретатор видит вызов функции alert и хочет вывести переданное ему значение. А вместо значения: Другая функция. Должен сперва вызвать его, и вывести результат вызова функции random.

А вызов функции возвращает то, что записано после return. Если нет return - все функции возвращают undefined.

Если с первого раза попадает на интервал: Возвращается value,

else: вызывается та же функция, но без return: функция возвращает undefined, а результат нового вызова random никуда не записывается, и просто стирается.
________

P.s. весь подход изначально неправильный... Это решается без повторных вызовов, в одну строчку.
Похожие вопросы