Форум 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=209687)

rambler 08.12.2014 19:40

запутался с индексом массивов
 
Доброго времени суток пишу метод класса, который должен возвращать случайный индекс. Точнее хочу написать только малость запутался буду рад любой помощи заранее спасибо
Код AS3:

package alibrary{
 
        /**
        * ...
        * @author rambler
        */

        public class ArrayAdvanced  {
 
                private static var endIndexArray:Array = [-1];
 
                public function ArrayAdvanced() {
 
 
                }
 
 
        internal function searchArray(theArray:Array, searchElement:Object):int
        {
                // Проверять каждый элемент, чтобы определить, совпадает ли
                // его значение со значением параметра searchElement
                for (var i:int = 0; i < theArray.length; i++) {
 
                        if (theArray[i] == searchElement)
                        {
                                return i;
                        }
                }
                return -1;
        }
        internal function randomIndexArray(theArray:Array):Array// Проблемный код
        {
                for (var i:int = 0; i < theArray.length; i++)// Обходим массив
                {
                        if (theArray[i] == endIndexArray)// Если массив кончился, вернуть случайный индекс
                        {
                                var randomArray:Array = theArray[Math.floor(Math.random() * i)];
                                return randomArray;
                        }
 
                }
                return [i];
        }
 
        }
}


TWETTI 08.12.2014 21:40

Зачем здесь цикл? Можно написать просто:
Код AS3:

internal function randomIndexArray(theArray:Array):Array// Проблемный код
{
        return Math.round(Math.random() * (theArray.length - 1));
}


rambler 08.12.2014 22:52

да цикл был лишним. немножко скорректировал. спасибо за подсказку совсем упустил .length
Код AS3:

internal function randomIndexArray(theArray:Array):Number
        {
 
        return Math.round(Math.random() * (theArray.length - 1));
 
        }


ChuwY 09.12.2014 01:07

round тут лишний.
Нужно просто:
Код AS3:

internal function randomIndexArray(theArray:Array):int
{
        return Math.random() * theArray.length;
}


neonoviiwolf 09.12.2014 09:32

ChuwY ага, ищем в массиве элемент с индексом 1,2456.

Добавлено через 2 минуты
TWETTI просто вопрос, а последний элемент когда нибудь сможет выпасть? может вместо "-1" написать "-0,99"?

ObOs 09.12.2014 10:30

Цитата:

Сообщение от neonoviiwolf (Сообщение 1176075)
ChuwY ага, ищем в массиве элемент с индексом 1,2456.

Посмотрите внимательней на тип данных который возвращает метод.

nubideus 09.12.2014 10:33

Цитата:

ага, ищем в массиве элемент с индексом 1,2456.
ага, у нас int с плавающей запятой?


round тут не просто лишний, он левый. тут нужен floor
a[Math.floor(Math.random() * a.length)]

зачем вообще писать целый метод для этого? индусостайл getArrayIndex1(theArray:Array):int{return 1};

a[Math.random() * a.length | 0]

> searchArray
ну есть же indexOf

КорДум 09.12.2014 10:41

Конвертация в int и так сработает как Math.floor(), пусть даже она не явная.

nubideus 09.12.2014 10:53

Цитата:

Конвертация в int и так сработает как Math.floor(), пусть даже она не явная.
это к чему?
надо же показать контекст, а то я могу написать ["asd"][0.5] // undefined
где конвертация?

rambler 09.12.2014 11:04

спасибо за подсказку nubideus (indexOf)


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

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