Math.random несколько объектов
Состоит задача выводить рандом 8 картинок с 20.
Как сделать для одной код ниже, а вот как сделать для 8 ? var a=Math.round(Math.random()*5) image = new Array(); image[0]="1.jpg" image[1]="2.jpg" image[2]="3.jpg" image[3]="4.jpg" image[4]="5.jpg" image[5]="6.jpg" document.write ("<img src="+image[a]+">"); |
<script> image = new Array(); image[0]="1.jpg" image[1]="2.jpg" image[2]="3.jpg" image[3]="4.jpg" image[4]="5.jpg" image[5]="6.jpg" image[6]="0.jpg" image[7]="7.jpg" image[8]="8.jpg" image[9]="9.jpg" image[10]="10.jpg" image[11]="11.jpg" for(i=0;i<6;i++){ var a=Math.round(Math.random()*11) document.write ("<img src="+image[a]+" width=100 height=100>"); } </script> Посмотри,вроде работает.С 11 картинок выводится 6:) |
Да все работает но теперь еще одна проблема, как сделать чтобы они не повторялись .
|
ну тЫ ведь просил рандом .....:).Сейчас подумаю
|
<script> image = new Array(); image[0]="1.jpg" image[1]="2.jpg" image[2]="3.jpg" image[3]="4.jpg" image[4]="5.jpg" image[5]="6.jpg" image[6]="0.jpg" image[7]="7.jpg" image[8]="8.jpg" image[9]="9.jpg" image[10]="10.jpg" image[11]="11.jpg" image[12]="12.jpg" image[13]="13.jpg" image[14]="14.jpg" image[15]="15.jpg" image[16]="16.jpg" image[17]="17.jpg" image[18]="18.jpg" image[19]="19.jpg" image[20]="20.jpg" var a=Math.round(Math.random()*11) for(i=0;i<8;i++){ //var a=Math.round(Math.random()*11) document.write ("<img src="+image[a+i]+" width=100 height=100 >"); } </script> |
Если уменьшить количество картинок или увеличить то для некоторых картинок идет
<img src="undefined" data-text="undefined"> И что такое *11 от чего зависит ? |
var a=Math.round(Math.random()*11) генерирует число от 0 до 11 рандомно каждЫй раз при обновлении страници.
Теперь у нас будет создаваться 8 картинок (for(i=0;i<8;i++){}) а и адрес будет a+i. Если а=11 то загрузятся картинки 11,12,13,14,15,16,17,18,19 Если а=0 то от 0-7. Возможно нужно написать не 11 ,а 12 |
Цитата:
или все случайно - и не пересекаются до полной выборки(тогда их N*M(минимум_Не_пересекающихс я_Выборок) или...? |
Если я правильно понял, что нужно из 20 картинок случайно выбрать 8 и показать их в случайном порядке, то вот:
/* Эта функция выбирает случайное размещение m чисел из набора 0, 1, ..., n-1 и возвращает его в виде массива. Например: selectRandom(20, 8) -> [1,12,9,0,19,3,5,10] */ function selectRandom(n, m) { var a=[], result=[]; for (var i=0; i<n; i++) a.push(undefined); for (i=0; i<m; i++) { var c=Math.floor(Math.random()*(n-i)); a.some(function(unused, j){ if (!с--) { result.push(j); delete a[j]; return true; } }); } return result; } Хочу ещё заметить, що выражение Math.round(Math.random()*5) действительно выбирает случайное целое число от 0 до 5, но исходы не равновероятны: числа 0 и 5 будут выпадать в 2 раза реже, чем остальные. Потому что, например, 0 выпадет когда значение Math.random()*5 будет в промежутке [0, 0.5), числу 1 соответствует промежуток [0.5, 1.5) - последний в 2 раза длиннее. Эту ошибку я уже встречал в одном учебнике по Javascript, где говорилось, что выражение Math.round(Math.random()*5)+1 имитирует бросание кубика :lol: Если вы хотели, чтоб картинки выпадали с одинаковой вероятностью, то в варианте с одной картинкой нужно писать Math.floor(Math.random()*6) |
Могу предложить свой вариант (реализован на своей программе о рандомном бросании кубика) правда не знаю на сколько он рандомен:)
var i; var sh = 0; var prov = new Array(8); function izm(){ i = Math.random(); i *= 100; i = Math.round(i); if((i > 20)||(i == 0)){izm();return} prov[sh] = i; for(k = 0; k < prov.length; k++){ if(sh == k) break; if(prov[sh] == prov[k]){izm();return} } alert("<img src=\""+i+".jpg\" width=100 height=100>");//здесь алерт надо на document.write сменить sh++ if(sh < 8) izm(); } izm() |
Часовой пояс GMT +3, время: 05:01. |