Рандомные числа в диапозоне

Всем привет. Имеется следующий вопрос. Нужно сделать функцию, которая выводит числа в введенном диапазоне. Такую функцию сделал, при вводе двух значений, работает норм. Но возникает проблема, если ввожу только одно число, она не работает, т.к. требует и второе. Пробовал делать что-то типа проверки через if. И если второе число == underfind, то min == max, а min == 1, в свою очередь. (если введено только одно число, то оно становится максимальным, а минимальным стает единица), но тогда вообще бред выходит.

function randomInteger(min, max) {
  let rand = min - 0.5 + Math.random() * (max - min + 1);
  return Math.round(rand);
}
alert( randomInteger(prompt(), prompt()) );

если юзер не ввел, то что надо сделать? не пускать его дальше, или за него дописать недостающее число?

Посмотри информацию про функции и передачу значений по умолчанию.

1 симпатия

Ну считаем, что одно число должно быть введено точно. Если введено только одно, то оно становится максимальным, а минимальным становится единица.

Я бы начал с того, что вынес генерирование чисел и фильтрацию входных данных в разные функции:

const getUserInput = () => {
    // получение данных и дефолтные значения
	if(first <= second) {
		return [first, second];
	} else {
		return [second, first];
	}
}

const userInput = getUserInput()
randomInteger.apply(null, userInput); // или randomInteger(...userInput);

Пусть расцветают сто цветов.

Мой подход был бы таким. Первым параметром сделать max. min сделать вторым и логически описать как опциональным. Т.е. если min не определен, то использовать 0 или 1 (это тоже интересная тема какое значение выбрать).

Забавно что стандартный синтаксис значения по умолчанию function randomInteger(max, min = 1) { не работает как ожидалось бы: значение по умолчанию не устанавливается если закрыть второй prompt так как min при вызове alert(randomInteger(prompt(), prompt())); все таки передается, просто он null. Поэтому я выбрал проверять значение min на null и undefined чтобы покрыть случаи как для prompt-а, так и для вызова без него: randomInteger(10).

function randomInteger(max, min) {
	if (!max) {
		throw new Error('Функция требует хотя бы одного аргумента')
	}
	if (min == null) {// проверка и на null и на undefined из-за нестрогости ==
		min = 1
	}
	let rand = min - 0.5 + Math.random() * (max - min + 1);
	return Math.round(rand);
}
alert(randomInteger(prompt(), prompt()));