Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Рандомные неповторяющиеся числа (https://javascript.ru/forum/jquery/32302-randomnye-nepovtoryayushhiesya-chisla.html)

raler 10.10.2012 21:41

Рандомные неповторяющиеся числа
 
Привет всем. Хоть убейте, ищу уже несколько дней.

Может подскажите, нужен генератор рандомных неповторяющихся чисел (например, от 0 до 100).

Hekumok 10.10.2012 22:43

var randomNumber = function() {
alert(Math.floor(Math.random()*101)) ;
} ;
randomNumber() ;
randomNumber() ;
randomNumber() ;

Не?

Magneto 10.10.2012 23:12

Если нужен генератор рандомных, не повторяющихся чисел из заданного диапазона, то вот он:
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. Я этот генератор использовал для генерации плейлистов для онлайн проигрывателя.

raler 11.10.2012 00:26

Цитата:

Сообщение от Hekumok (Сообщение 209309)
var randomNumber = function() {
alert(Math.floor(Math.random()*101)) ;
} ;
randomNumber() ;
randomNumber() ;
randomNumber() ;

Не?

Нет, там числа могут повторяться.

raler 11.10.2012 00:26

Цитата:

Сообщение от Magneto (Сообщение 209322)
Если нужен генератор рандомных, не повторяющихся чисел из заданного диапазона, то вот он:
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. Я этот генератор использовал для генерации плейлистов для онлайн проигрывателя.

спасибо, попробую

Gvozd 11.10.2012 01:06

Цитата:

Сообщение от raler
Рандомные неповторяющиеся числа

Вам шашечки или ехать?
Рандомные и неповторяющиеся - два принципиально несовместимых требования.
А если же вы хотите рандомную последовательность из 100 чисел, то это совсем другая задача

raler 12.10.2012 00:12

Цитата:

Сообщение от Gvozd (Сообщение 209354)
Вам шашечки или ехать?
Рандомные и неповторяющиеся - два принципиально несовместимых требования.
А если же вы хотите рандомную последовательность из 100 чисел, то это совсем другая задача

ну незнаю, видимо неправильно выразился. да, мне нужна последовательность из из 100 неповторяющихся чисел в диапазоне от 0 до 100

raler 12.10.2012 00:12

Цитата:

Сообщение от Magneto (Сообщение 209322)
Если нужен генератор рандомных, не повторяющихся чисел из заданного диапазона, то вот он:
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. Я этот генератор использовал для генерации плейлистов для онлайн проигрывателя.

спасибо еще раз, все работает)

melky 13.10.2012 12:13

Цитата:

Сообщение от Magneto
arrayTotalNumbers.splice(tempRandomNumber, 1);

иу ...

по-моему, тут
Цитата:

Сообщение от Magneto
arrayTotalNumbers = [],

было бы целесообразно использовать типизированные массивы (те, что недавно появились), которые оптимизированы для работы с числами.

или же использовать объект, чтобы не splice'ить огромный массив.

Chisarat 03.08.2014 15:23

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(длина массива, минимальное, максимальное);


Часовой пояс GMT +3, время: 03:02.