#actionscript-3 #language-agnostic #for-loop
#actionscript-3 #язык не зависит #для цикла
Вопрос:
Я хочу запустить свой цикл for с определенным номером и сделать его циклическим. Вот так:
5, 6, 7, 8, 9, 10, 0, 1, 2, 3, 4
Если максимальное число равно 10 и начинается с 5.
Причина в том, что я хочу перебирать каждую плитку в моей игре в определенном порядке (сверху вниз, затем направо).
Я пробовал следующее, но оно пропускает одно число:
for(var i = position[0] 1; i != position[0]; i ){
for(var j = position[1] 1; j != position[1]; j ){
if(j > 11){
j = 0;
}
if(i > 23){
i = 0;
}
if(levelMap[i][j] == type){
return position;
}
trace("j" j);
}
trace(i);
}
Спасибо
Ответ №1:
Если вам нужна последовательность, подобная 5, 6, 7, 8, 9, 10, 0, 1, 2, 3, 4
(где отправной точкой может быть любое число в этом наборе), вам не нужны причудливые конструкции цикла.
Вы можете просто использовать обычный цикл с оператором modulo, что-то вроде (псевдокод, поскольку один из тегов был language-agnostic
):
start = 5
for i = 0 to 10
use_i = (start i) % 11
// do something with use_i rather than i.
next i
Это будет повторяться use_i
с 5 по 4, возвращаясь к 0 после 10.
Ответ №2:
Ваш вопрос немного сбивает с толку, но я вижу пару возможных ошибок, основанных на порядке чисел, который, по вашим словам, вы пытаетесь достичь.
Во-первых, если вы хотите, чтобы максимально возможное число для j
было 10
, ваше условие должно быть for (j > 10)
, а не for (j > 11)
. То, как это происходит сейчас, позволяет j
выполнять итерации 11
один раз.
Далее, в том же условном обозначении, вы захотите установить j
значение -1
, а не 0
. Это потому, что j
будет увеличиваться в следующем цикле, и установка его на 0
означает, что в следующем цикле j
фактически будет равно 1
, и пропустить 0
итерацию (что, возможно, вы имели в виду, когда сказали, что «пропускает одно число»). Так что это будет:
if (j > 10)
{
j = -1;
}
Надеюсь, это поможет.
Комментарии:
1. Извините, в моем примере я использовал 10, но код был из моего реального проекта (11 и 23).
Ответ №3:
Это можно было бы сделать только с помощью i; однако, пытаясь использовать ваш пример, возможно, что-то вроде:
package
{
import flash.display.Sprite;
public class Test extends Sprite
{
public function Test()
{
super();
for (var i:uint = 0, j:uint = 5; i < 11; i , j = (5 i) % 11)
{
trace("j = " j);
}
}
}
}
Комментарии:
1. Это приводит к: «5, 6, 7, 8, 9, 10, 0, 1, 2, 3, 4» по вашему запросу.