Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Работа с массивом. Рандомное число (http://www.flasher.ru/forum/showthread.php?t=170420)

jediff 24.10.2011 16:52

Работа с массивом. Рандомное число
 
Всем привет.Нужна Ваша помощь

к примеру у меня есть массив
Код AS3:

 var massiv1:Array = new Array (1, 2, 3, 4, 5);

в output я хочу получить одно рандомное число из моего массива , всё никак не додумаю как это сделать,
делал так :

Код AS3:

 var massiv1:Array = new Array (1, 2, 3, 4, 5);
massiv1.math.random();
trace (massiv1);

конечно, это абсолютно не првавильно,к сожалению не знаю правильной формулы( жду вашей помощи Господа :)

Astraport 24.10.2011 17:00

Рандомизируйте числа длины массива.
massiv1[randomIndex] - даст нужный результат.

Inet_PC 24.10.2011 17:01

Код AS3:

trace (massiv1[Math.round(Math.random() * (massiv1.length-1))])


smithy 24.10.2011 17:02

Цитата:

Сообщение от Inet_PC (Сообщение 1041525)
Код AS3:

trace (massiv1[Math.round(Math.random() * (massiv1.length-1))])


Ваш вариант выдаст неверное распределение: первый и последний элементы будут встречаться в ~2 раза реже остальных.

Код AS3:

var massiv:Array= [1,2,3,4,5];
var random:int= massiv[int(Math.random()*massiv.length)];
trace(random);


jediff 24.10.2011 17:07

Цитата:

Сообщение от Inet_PC (Сообщение 1041525)
Код AS3:

trace (massiv1[Math.round(Math.random() * (massiv1.length-1))])


могли бы вы объяснить свою запись? а именно

* (massiv1.length-1)

на сколько я знаю свойство length подсчитывает количество элементов в массиве не пойму к чему здесь -1 :(

задаю такие вопросы, так как в русле неделю, вот хочу с массивами конкретно разобраться

Добавлено через 6 минут
Код AS3:

var massiv:Array= [1,2,3,4,5];
var random:int= massiv[int(Math.random()*massiv.length)];
trace(random);

[/quote]

Спасибо,Ваша запись понятна и работает

in4core 24.10.2011 17:14

Цитата:

не пойму к чему здесь -1
Массив считается с 0 индекса. Длинна массива отрицает 0. Тоесть длинна массива 10 элементов, но последний элемент есть массив[9] . И чтобы на него попасть нам надо написать -1

goodguy 24.10.2011 17:25

на самом деле это не обязательно, достаточно такой записи
Код AS3:

var randomIndex:int = int(Math.random() * array.length);

Цитата:

Ваш вариант выдаст неверное распределение: первый и последний элементы будут встречаться в ~2 раза реже остальных.
Откуда такие данные? Эта запись даст ткие же результаты, просто она более громоздка и неуклюжа

etc 24.10.2011 17:32

Цитата:

Сообщение от goodguy (Сообщение 1041537)
Откуда такие данные?

В силу работы округления до ближайшего.
И действительно реже:

Код AS3:

function test():void {
        var total:int = 5;
        var matches:int = 0;
        var i:int = 0;
        var c:int = 10000;
        var test:int;
 
        for (i = 0;i < c;i++) {
                test = int(total * Math.random());
                if (!test || test == total) matches++;
        }
 
        trace(matches); // 1993
        matches = 0;
 
        for (i = 0;i < c;i++) {
                test = Math.round((total - 1) * Math.random());
                if (!test || test == total) matches++;
        }
 
        trace(matches); // 1255
}
test();


Inet_PC 24.10.2011 17:39

Цитата:

Ваш вариант выдаст неверное распределение: первый и последний элементы будут встречаться в ~2 раза реже остальных.
Вы правы

GBee 24.10.2011 17:43

Даже интересно стало.
Код AS3:

public function Test():void 
                {
                        var total:int = 5;
                        var matches:int = 0;
                        var i:int = 0;
                        var c:int = 10000;
                        var test:int;
                        var arr:Array = [0,0,0,0,0];
 
                        for (i = 0;i < c;i++) {
                                test = int(total * Math.random());
                                arr[test]++
                        }
 
                        trace("int", arr);
 
                        arr = [0,0,0,0,0];
 
                        for (i = 0;i < c;i++) {
                                test = Math.round((total - 1) * Math.random());
                                arr[test]++
                        }
 
                        trace("round", arr);
                }

int 2002,1990,2045,1992,1971
round 1197,2534,2518,2530,1221

int 2009,1973,2025,2020,1973
round 1204,2534,2478,2511,1273

int 2063,1915,1983,1976,2063
round 1215,2495,2445,2565,1280


Часовой пояс GMT +4, время: 21:28.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.