Просмотр полной версии : Вывести случайное число от 1 до 20
beliykot
23.08.2011, 23:54
Добрый вечер!
Осваиваю javascript вторые сутки:) Возник такой вопрос:
как 20 раз вывести случайное число от 1 до 20, но с учетом того, что повторять числа нельзя
Пользователь нажимает на кнопку, при этом выводится случайная картинка, одна из 20, при следующем нажатии рядом выводится опять же случайная картинка из 19 оставшихся и так пока все 20 не будут выведены.
дошел до такого, но как теперь сделать вывод случайного числа с учетом ранее выведенных не знаю
$('button').addEvents({'mouseover': function(){
--/обработка события/--
},
'mouseout': function(){
--/обработка события/--
},
'click': function(){
var randomKart = Math.floor( Math.random( ) * (20 - 1 + 1) ) + 1;
var element = new Element('img', {src: 'kart/'+randomKart+'.png'});
$(myDiv).adopt(element);
}
});
использовал mootools
:help:
var list = [];
function(){
if ( list.length == 0) {
for( var i = 1; i <= 20; i++ ) {
list.push( i );
}
}
var randomKart = list[ Math.floor( Math.random() * list.length ) ];
var element = new Element('img', {src: 'kart/'+randomKart+'.png'});
$(myDiv).adopt(element);
list.splice( randomKart, 1 );
}
beliykot
24.08.2011, 00:23
Спасибо devote!!!
Как я понял реализовано так:
1.создали пустой массив
2.Проверяем массив на наличие данных, если пустой создаем там 20 элементов
3.выбираем случайный элемент из массива и используем в своих корыстных целях:))
4.удаляем выбранный элемент из массива
Еще раз спасибо!
хотя я сделал ошибку, не корыстно =)
надо так:var list = [];
function(){
if ( list.length == 0) {
for( var i = 1; i <= 20; i++ ) {
list.push( i );
}
}
var item_id = Math.floor( Math.random() * list.length ),
randomKart = list[ item_id ],
element = new Element('img', {src: 'kart/'+randomKart+'.png'});
$(myDiv).adopt(element);
list.splice( item_id, 1 );
}
var item_id = Math.floor( Math.random() * list.length ),
не боишься, что индекс попадет в длину массива? вроде нет, не попадет. или шанс всё-таки есть ?
0 <= Math.random()*list.length <*!*=*/!* list.length
не боишься, что индекс попадет в длину массива?
Хз, миллион раз так делал, вроде не попадал :)
nikita.mmf
26.08.2011, 12:53
Можно использовать еще вот такой способ, в нем не надо думать об индексах
for ( var list = [], i = 0; i < 20; ) {
list[ i ] = ++i;
}
list.sort(function(){ return Math.random() - .5; });
function() {
var element = new Element('img', {src: 'kart/' + list.shift() + '.png'});
$(myDiv).adopt(element);
}
B@rmaley.e><e
26.08.2011, 14:40
melky, Math.random() никогда не вернёт 1.
melky, Math.random() никогда не вернёт 1.
e [0, 1);
уже посмотрел
Можно использовать еще вот такой способ, в нем не надо думать об индексах
for ( var list = [], i = 0; i < 20; ) {
list[ i ] = ++i;
}
list.sort(function(){ return Math.random() - .5; });
function() {
var element = new Element('img', {src: 'kart/' + list.shift() + '.png'});
$(myDiv).adopt(element);
}
Во первых ему нужно от 1-20, во вторых ему нужно при клике что бы выводилась случайная картинка, и не повторялись индексы, а когда они закончатся все шло заново... в твоем варианте, заново ничего не будет идти, все индексы закончатся и будет пустой массив, тоесть он не обновиться... Читай вопрос внимательнее перед тем как приводить свой пример.
nikita.mmf
29.08.2011, 13:07
devote,
специально прочитал вопрос и не нашел там место где требуется массив заполнять занова, и внимательно посмотрите код прежде чем критиковать, в list хранятся значения от 1 до 20 и каждый раз при вызове функции, будет браться число случайное число от 1 до 20, где не соответствие условию?
специально прочитал вопрос и не нашел там место где требуется массив заполнять зановаВерно говоришь, видимо я автоматом додумал сам... Ибо тупо делать кнопку на которую 20 раз жмакнул и потом ошибка.
и внимательно посмотрите код прежде чем критиковатьДа не заметил сложение перед назначением.
vBulletin® v3.6.7, Copyright ©2000-2025, Jelsoft Enterprises Ltd. Перевод: zCarot