10.10.2012, 21:41
|
|
Аспирант
|
|
Регистрация: 02.03.2011
Сообщений: 38
|
|
Рандомные неповторяющиеся числа
Привет всем. Хоть убейте, ищу уже несколько дней.
Может подскажите, нужен генератор рандомных неповторяющихся чисел (например, от 0 до 100).
|
|
10.10.2012, 22:43
|
|
✔
|
|
Регистрация: 04.06.2012
Сообщений: 513
|
|
var randomNumber = function() {
alert(Math.floor(Math.random()*101)) ;
} ;
randomNumber() ;
randomNumber() ;
randomNumber() ;
Не?
__________________
★ ²º¹³ ☆
|
|
10.10.2012, 23:12
|
|
Люмус, Емаксос Developer!
|
|
Регистрация: 06.05.2010
Сообщений: 677
|
|
Если нужен генератор рандомных, не повторяющихся чисел из заданного диапазона, то вот он:
function generateArrayRandomNumber (min, max) {
var totalNumbers = max - min + 1,
arrayTotalNumbers = [],
arrayRandomNumbers = [],
tempRandomNumber;
while (totalNumbers--) {
arrayTotalNumbers.push(totalNumbers + min);
}
while (arrayTotalNumbers.length) {
tempRandomNumber = Math.round(Math.random() * (arrayTotalNumbers.length - 1));
arrayRandomNumbers.push(arrayTotalNumbers[tempRandomNumber]);
arrayTotalNumbers.splice(tempRandomNumber, 1);
}
return arrayRandomNumbers;
}
// Нужно учесть что в диапазоне участвуют и минимальное и максимальное число
// тоесть если задать (0, 100) то на выходе получим массив из 101-го числа
// от 1 до 100 и плюс число 0
alert(generateArrayRandomNumber(45, 67));
P.S. Я этот генератор использовал для генерации плейлистов для онлайн проигрывателя.
Последний раз редактировалось Magneto, 10.10.2012 в 23:14.
Причина: хуй!
|
|
11.10.2012, 00:26
|
|
Аспирант
|
|
Регистрация: 02.03.2011
Сообщений: 38
|
|
Сообщение от Hekumok
|
var randomNumber = function() {
alert(Math.floor(Math.random()*101)) ;
} ;
randomNumber() ;
randomNumber() ;
randomNumber() ;
Не?
|
Нет, там числа могут повторяться.
|
|
11.10.2012, 00:26
|
|
Аспирант
|
|
Регистрация: 02.03.2011
Сообщений: 38
|
|
Сообщение от Magneto
|
Если нужен генератор рандомных, не повторяющихся чисел из заданного диапазона, то вот он:
function generateArrayRandomNumber (min, max) {
var totalNumbers = max - min + 1,
arrayTotalNumbers = [],
arrayRandomNumbers = [],
tempRandomNumber;
while (totalNumbers--) {
arrayTotalNumbers.push(totalNumbers + min);
}
while (arrayTotalNumbers.length) {
tempRandomNumber = Math.round(Math.random() * (arrayTotalNumbers.length - 1));
arrayRandomNumbers.push(arrayTotalNumbers[tempRandomNumber]);
arrayTotalNumbers.splice(tempRandomNumber, 1);
}
return arrayRandomNumbers;
}
// Нужно учесть что в диапазоне участвуют и минимальное и максимальное число
// тоесть если задать (0, 100) то на выходе получим массив из 101-го числа
// от 1 до 100 и плюс число 0
alert(generateArrayRandomNumber(45, 67));
P.S. Я этот генератор использовал для генерации плейлистов для онлайн проигрывателя.
|
спасибо, попробую
|
|
11.10.2012, 01:06
|
|
Матрос
|
|
Регистрация: 04.04.2008
Сообщений: 6,246
|
|
Сообщение от raler
|
Рандомные неповторяющиеся числа
|
Вам шашечки или ехать?
Рандомные и неповторяющиеся - два принципиально несовместимых требования.
А если же вы хотите рандомную последовательность из 100 чисел, то это совсем другая задача
|
|
12.10.2012, 00:12
|
|
Аспирант
|
|
Регистрация: 02.03.2011
Сообщений: 38
|
|
Сообщение от Gvozd
|
Вам шашечки или ехать?
Рандомные и неповторяющиеся - два принципиально несовместимых требования.
А если же вы хотите рандомную последовательность из 100 чисел, то это совсем другая задача
|
ну незнаю, видимо неправильно выразился. да, мне нужна последовательность из из 100 неповторяющихся чисел в диапазоне от 0 до 100
|
|
12.10.2012, 00:12
|
|
Аспирант
|
|
Регистрация: 02.03.2011
Сообщений: 38
|
|
Сообщение от Magneto
|
Если нужен генератор рандомных, не повторяющихся чисел из заданного диапазона, то вот он:
function generateArrayRandomNumber (min, max) {
var totalNumbers = max - min + 1,
arrayTotalNumbers = [],
arrayRandomNumbers = [],
tempRandomNumber;
while (totalNumbers--) {
arrayTotalNumbers.push(totalNumbers + min);
}
while (arrayTotalNumbers.length) {
tempRandomNumber = Math.round(Math.random() * (arrayTotalNumbers.length - 1));
arrayRandomNumbers.push(arrayTotalNumbers[tempRandomNumber]);
arrayTotalNumbers.splice(tempRandomNumber, 1);
}
return arrayRandomNumbers;
}
// Нужно учесть что в диапазоне участвуют и минимальное и максимальное число
// тоесть если задать (0, 100) то на выходе получим массив из 101-го числа
// от 1 до 100 и плюс число 0
alert(generateArrayRandomNumber(45, 67));
P.S. Я этот генератор использовал для генерации плейлистов для онлайн проигрывателя.
|
спасибо еще раз, все работает)
|
|
13.10.2012, 12:13
|
sinistral
|
|
Регистрация: 28.03.2011
Сообщений: 5,418
|
|
Сообщение от Magneto
|
arrayTotalNumbers.splice(tempRandomNumber, 1);
|
иу ...
по-моему, тут
Сообщение от Magneto
|
arrayTotalNumbers = [],
|
было бы целесообразно использовать типизированные массивы (те, что недавно появились), которые оптимизированы для работы с числами.
или же использовать объект, чтобы не splice'ить огромный массив.
|
|
03.08.2014, 15:23
|
Новичок на форуме
|
|
Регистрация: 03.08.2014
Сообщений: 1
|
|
function inArray(arr, num){
for (var i = 0; i < arr.length; i++) {
if (num == arr[i]) return true;
};
return false;
}
function createRand(randLength, min, max){
var randArray = [],
i = 0;
if (randLength>(max-min+1)) {
return null;
}
while (i < randLength) {
var rand = Math.floor(Math.random() * (max - min + 1)) + min;
if (!(inArray(randArray,rand))){
i++;
randArray.unshift(rand);
}
};
return randArray;
}
использовать createRand(длина массива, минимальное, максимальное);
|
|
|
|