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, время: 18:37. |