Вывести случайное число от 1 до 20
Добрый вечер!
Осваиваю 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 ); } |
Спасибо 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 |
Цитата:
|
Можно использовать еще вот такой способ, в нем не надо думать об индексах
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); } |
melky, Math.random() никогда не вернёт 1.
|
Цитата:
уже посмотрел |
Цитата:
|
devote,
специально прочитал вопрос и не нашел там место где требуется массив заполнять занова, и внимательно посмотрите код прежде чем критиковать, в list хранятся значения от 1 до 20 и каждый раз при вызове функции, будет браться число случайное число от 1 до 20, где не соответствие условию? |
Цитата:
Цитата:
|
Часовой пояс GMT +3, время: 06:41. |