Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 30.05.2012, 13:10
Кандидат Javascript-наук
Отправить личное сообщение для Beriagts Посмотреть профиль Найти все сообщения от Beriagts
 
Регистрация: 31.07.2011
Сообщений: 118

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]+">");
Ответить с цитированием
  #2 (permalink)  
Старый 30.05.2012, 13:52
Профессор
Отправить личное сообщение для bot87 Посмотреть профиль Найти все сообщения от bot87
 
Регистрация: 16.05.2011
Сообщений: 307

<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
__________________
Я только учусь.Ногами просьба не бить
Ответить с цитированием
  #3 (permalink)  
Старый 30.05.2012, 16:05
Кандидат Javascript-наук
Отправить личное сообщение для Beriagts Посмотреть профиль Найти все сообщения от Beriagts
 
Регистрация: 31.07.2011
Сообщений: 118

Да все работает но теперь еще одна проблема, как сделать чтобы они не повторялись .
Ответить с цитированием
  #4 (permalink)  
Старый 30.05.2012, 16:09
Профессор
Отправить личное сообщение для bot87 Посмотреть профиль Найти все сообщения от bot87
 
Регистрация: 16.05.2011
Сообщений: 307

ну тЫ ведь просил рандом ......Сейчас подумаю
__________________
Я только учусь.Ногами просьба не бить
Ответить с цитированием
  #5 (permalink)  
Старый 30.05.2012, 16:32
Профессор
Отправить личное сообщение для bot87 Посмотреть профиль Найти все сообщения от bot87
 
Регистрация: 16.05.2011
Сообщений: 307

<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>
__________________
Я только учусь.Ногами просьба не бить
Ответить с цитированием
  #6 (permalink)  
Старый 30.05.2012, 18:20
Кандидат Javascript-наук
Отправить личное сообщение для Beriagts Посмотреть профиль Найти все сообщения от Beriagts
 
Регистрация: 31.07.2011
Сообщений: 118

Если уменьшить количество картинок или увеличить то для некоторых картинок идет
<img src="undefined" data-text="undefined">

И что такое *11 от чего зависит ?
Ответить с цитированием
  #7 (permalink)  
Старый 30.05.2012, 19:20
Профессор
Отправить личное сообщение для bot87 Посмотреть профиль Найти все сообщения от bot87
 
Регистрация: 16.05.2011
Сообщений: 307

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
__________________
Я только учусь.Ногами просьба не бить
Ответить с цитированием
  #8 (permalink)  
Старый 30.05.2012, 19:49
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от Beriagts
Как сделать для одной код ниже, а вот как сделать для 8 ?
А какой алгоритм - первая картинка случайно - за ней следуют следущие?

или все случайно - и не пересекаются до полной выборки(тогда их
N*M(минимум_Не_пересекающихс я_Выборок) или...?
Ответить с цитированием
  #9 (permalink)  
Старый 31.05.2012, 21:33
Профессор
Отправить личное сообщение для oneguy Посмотреть профиль Найти все сообщения от oneguy
 
Регистрация: 31.05.2012
Сообщений: 396

Если я правильно понял, что нужно из 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 имитирует бросание кубика Если вы хотели, чтоб картинки выпадали с одинаковой вероятностью, то в варианте с одной картинкой нужно писать Math.floor(Math.random()*6)

Последний раз редактировалось oneguy, 31.05.2012 в 21:35.
Ответить с цитированием
  #10 (permalink)  
Старый 31.05.2012, 22:39
Аватар для Dim@
Профессор
Отправить личное сообщение для Dim@ Посмотреть профиль Найти все сообщения от Dim@
 
Регистрация: 21.04.2012
Сообщений: 951

Могу предложить свой вариант (реализован на своей программе о рандомном бросании кубика) правда не знаю на сколько он рандомен
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()
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка JS объектов браузером по умолчанию estonets Общие вопросы Javascript 3 29.04.2014 17:08
Несколько созданных элементов располагаются в одной строке. Как этого избежать? Hold Events/DOM/Window 1 21.01.2011 23:52
Несколько одинаковых таблиц. Обращение к отдельным элементам в них. zaytsewa Элементы интерфейса 7 11.11.2010 09:08
Массив объектов или объект объектов vladlen Общие вопросы Javascript 19 30.10.2010 03:10
Быстрый поиск объектов Shasoft Общие вопросы Javascript 7 30.07.2009 05:28