Случайное число javascript/jquery между -13 и 13, исключая числа от -3 до 3
Я использую
var min = -13;
var max = 13;
var random = Math.floor(Math.random() * (max - min + 1)) + min;
но он возвращает ВСЕ числа (случайные) между -13 и 13. как я могу заставить его генерировать случайное число между -13 до -4, исключая -3, -2, -1, 0, 1, 2, 3 и в том числе от 4 до 13.
Ответы
Ответ 1
Получите случайное число между 1-10 и добавьте 3, чтобы получить один между 4-13:
random = Math.ceil(Math.random() * 10) + 3;
Создать случайное значение между 0-1. Если это 0, сделайте число отрицательным:
random = (Math.floor(Math.random() * 2) == 0) ? 0 - random : random;
JSFiddle, показывающий рабочую копию:
http://jsfiddle.net/adamh/cyGwf/
Ответ 2
Насколько я знаю, невозможно создать случайное число и принять во внимание набор исключений. Вам нужно создать рекурсивную функцию для фильтрации. См. Ниже:
function GenerateRandomNumber() {
var min = -13, max = 13;
var random = Math.floor(Math.random() * (max - min + 1)) + min;
// If random number is undesirable, generate a new number, else return
return (random < 4 && random > -4) ? GenerateRandomNumber() : random;
}
var myRandomNumber = GenerateRandomNumber();
Здесь рабочая скрипка.
Или, вежливость @Rozwel, нерекурсивная версия с использованием цикла while:
function GenerateRandomNumber() {
var min = -13, max = 13;
var random = 0;
while (random < 4 && random > -4) {
random = Math.floor(Math.random() * (max - min + 1)) + min;
}
return random;
}
Здесь jsperf, который сравнивает принятый ответ с этими двумя параметрами.
Ответ 3
Незначительное изменение того, что у вас есть, должно это сделать. Производите случайное число в диапазоне от -6 до 13, а затем, если значение меньше 4, вычитайте 7. Я его не тестировал, но я подозреваю, что он будет работать лучше, чем производить два рандома и умножать.
var min = -6;
var max = 13;
var random = Math.floor(Math.random() * (max - min + 1)) + min;
if(random < 4){random = random - 7;}
Ответ 4
var pickOne = [4,5,6,7,8,9,10,11,12,13],
value = pickOne[Math.floor(Math.random() * pickOne.length)];
value = (Math.random() < 0.5)? value : -value;
console.log(value)
Ответ 5
var sign = Math.round(Math.random()) == 0 ? -1 : 1;
var number = Math.round(Math.random() * 9) + 4;
return sign * number;
Ответ 6
Math.round(Math.random()) возвращает 0 или 1,
поэтому его можно записать без промежуточного значения:
alert( (Math.ceil(Math.random() * 10) + 3)*(Math.round(Math.random())?1:-1));
Ответ 7
var n = Math.floor(Math.random() * 20) - 10;
n = n < 0 ? n - 3 : n + 4;