PDA

Просмотр полной версии : Операция с двойным циклом


Tetraeon
05.09.2012, 01:10
Приветствую, подскажите как можно провести операцию с двумя циклами так чтобы к каждому элементу первого массива применялись действия 2х элементов второго массива... если трейсить двойной цикл в такой форме:

for (var q:int=0; q<massiveOne.length; q++)
{
for (var w:int=0; w<massiveTwo.length; w++)
{
trace(q, w);
}
}

В данном случае выводит к каждому эл-ту 1 массива применяется все элементы 2го массива
а нужно вот такое:
0 0
0 1
1 2
1 3
2 4
2 5

Пробовал w++ менять на Math.floor(w+=0,5) и все в таком духе.. программа зависала.

bav
05.09.2012, 01:19
var secondIndex:int = 0;
for (var q:int = 0; q < massiveOne.length; q++)
{
for (var w:int = 0; w < 2 && secondIndex < massiveTwo.length; w++, secondIndex++)
{
trace(q, secondIndex);
}
}

Tetraeon
05.09.2012, 18:30
Спасибо большое, это очень поможет и в будущем.
Не подскажите, а почему при использовании двойного цикла статический массив(другого класса) ссылающийся на положение объектов на сцене перестает отслеживать положение этих объектов?
Вот в такой форме:

var secondIndex:int = 0;
for (var q:int = 0; q < massiveOne.length; q++)
{
trace(massiveOne[q].x); //Отслеживает
for (var w:int = 0; w < 2 && secondIndex < massiveTwo.length; w++, secondIndex++)
{
trace(massiveOne[q].x); //Не отслеживает
}
}

Т.е. я не беру в счет через сколько позиций проскакивает массив, главное что отслеживание не ведется.

bav
05.09.2012, 19:24
Могу предположить, что второй трейс не вызывается по причине того, что secondIndex в какой-то момент становится равным massiveTwo.length, и с этого момента тело внутреннего цикла перестает выполняться вовсе.

Tetraeon
05.09.2012, 20:42
Вы оказались правы, спасибо за информацию при много вам благодарен.
Вот таким образом выкрутился:

for (var q:int = 0; q < massiveOne.length; q++)
{
if(secondIndex==massiveTwo.length)
{
secondIndex=0;
}
for (var w:int = 0; w < 2 && secondIndex < massiveTwo.length; w++, secondIndex++)
{
trace(secondIndex, q);
}
}