Для петель - не проверить состояние при первом запуске? - PullRequest
0 голосов
/ 19 октября 2011

Я хочу запустить цикл 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);
}

Спасибо

Ответы [ 3 ]

5 голосов
/ 19 октября 2011

Если вам нужна последовательность, подобная 5, 6, 7, 8, 9, 10, 0, 1, 2, 3, 4 (где начальной точкой может быть любое число в этом наборе), вам не нужны причудливые конструкции цикла.

Вы можете просто использовать normal цикл с оператором по модулю, что-то вроде (псевдокод, поскольку один из тегов был 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.

1 голос
/ 19 октября 2011

Это может быть сделано только со мной; Тем не менее, попытка использовать ваш пример может быть что-то вроде:

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 голос
/ 19 октября 2011

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

Во-первых, если вы хотите, чтобы максимально возможное число для j было 10, ваше условное выражение должно быть for (j > 10), а не for (j > 11). Теперь он позволяет j итерировать как 11 один раз.

Далее, в том же условном выражении вы захотите установить j на -1, а не 0. Это связано с тем, что j будет увеличиваться в следующем цикле, а установка его на 0 означает, что в следующем цикле j будет фактически равна 1, и пропустить итерацию 0 (что может быть тем, что вы имели в виду, сказал, что "пропускает один номер"). Так будет:

if (j > 10)
{
    j = -1;
}

Надеюсь, это поможет.

...