Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Регистрация Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 24.10.2011, 16:52
jediff вне форума Посмотреть профиль Отправить личное сообщение для jediff Найти все сообщения от jediff
  № 1  
Ответить с цитированием
jediff

Регистрация: Dec 2010
Сообщений: 22
Question Работа с массивом. Рандомное число

Всем привет.Нужна Ваша помощь

к примеру у меня есть массив
Код 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);
конечно, это абсолютно не првавильно,к сожалению не знаю правильной формулы( жду вашей помощи Господа

Старый 24.10.2011, 17:00
Astraport вне форума Посмотреть профиль Отправить личное сообщение для Astraport Найти все сообщения от Astraport
  № 2  
Ответить с цитированием
Astraport
 
Аватар для Astraport

блогер
Регистрация: Sep 2009
Сообщений: 2,463
Записей в блоге: 2
Рандомизируйте числа длины массива.
massiv1[randomIndex] - даст нужный результат.

Старый 24.10.2011, 17:01
Inet_PC вне форума Посмотреть профиль Отправить личное сообщение для Inet_PC Посетить домашнюю страницу Inet_PC Найти все сообщения от Inet_PC
  № 3  
Ответить с цитированием
Inet_PC

Регистрация: Feb 2009
Адрес: Гы...поди, найди!
Сообщений: 853
Записей в блоге: 1
Код AS3:
trace (massiv1[Math.round(Math.random() * (massiv1.length-1))])

Старый 24.10.2011, 17:02
smithy вне форума Посмотреть профиль Отправить личное сообщение для smithy Найти все сообщения от smithy
  № 4  
Ответить с цитированием
smithy

Регистрация: Oct 2011
Адрес: Питер
Сообщений: 58
Цитата:
Сообщение от Inet_PC Посмотреть сообщение
Код 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);


Последний раз редактировалось smithy; 24.10.2011 в 17:08.
Старый 24.10.2011, 17:07
jediff вне форума Посмотреть профиль Отправить личное сообщение для jediff Найти все сообщения от jediff
  № 5  
Ответить с цитированием
jediff

Регистрация: Dec 2010
Сообщений: 22
Цитата:
Сообщение от Inet_PC Посмотреть сообщение
Код 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]

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

Старый 24.10.2011, 17:14
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 6  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Цитата:
не пойму к чему здесь -1
Массив считается с 0 индекса. Длинна массива отрицает 0. Тоесть длинна массива 10 элементов, но последний элемент есть массив[9] . И чтобы на него попасть нам надо написать -1
__________________
Марк Tween

Старый 24.10.2011, 17:25
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 7  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
на самом деле это не обязательно, достаточно такой записи
Код AS3:
var randomIndex:int = int(Math.random() * array.length);
Цитата:
Ваш вариант выдаст неверное распределение: первый и последний элементы будут встречаться в ~2 раза реже остальных.
Откуда такие данные? Эта запись даст ткие же результаты, просто она более громоздка и неуклюжа

Старый 24.10.2011, 17:32
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 8  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,782
Цитата:
Сообщение от goodguy Посмотреть сообщение
Откуда такие данные?
В силу работы округления до ближайшего.
И действительно реже:

Код 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();

Старый 24.10.2011, 17:39
Inet_PC вне форума Посмотреть профиль Отправить личное сообщение для Inet_PC Посетить домашнюю страницу Inet_PC Найти все сообщения от Inet_PC
  № 9  
Ответить с цитированием
Inet_PC

Регистрация: Feb 2009
Адрес: Гы...поди, найди!
Сообщений: 853
Записей в блоге: 1
Цитата:
Ваш вариант выдаст неверное распределение: первый и последний элементы будут встречаться в ~2 раза реже остальных.
Вы правы

Старый 24.10.2011, 17:43
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 10  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Даже интересно стало.
Код 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
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.


Последний раз редактировалось GBee; 24.10.2011 в 17:52.
Создать новую тему Ответ Часовой пояс GMT +4, время: 16:47.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
actionscript3.0 , Adobe Flash , flash , math , рандомное число
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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