цикл for без объявления индекса - PullRequest
1 голос
/ 21 ноября 2011

Итак, я объявляю переменную some where и инициализирую ее. Теперь позже мне нужно использовать его для цикла, пока он еще положительный, поэтому мне нужно уменьшить его. Для меня циклическое использование условия и декремента требует для for, но для него мы пропускаем первую часть инициализации. Но мне не нужно ничего инициализировать. Так как же мне поступить так?

for (space = space; space > 0; space--)//my first way to do it but ide doesnt like it

Второй способ:

for (; space > 0; space--)//my friend recommended me this way but looks kind weird

Есть ли еще способы для меня иметь цикл только с условием и увеличением / уменьшением?

Проверка орфографии P.S не знает, что «декремент» - это слово. Я почти уверен, что это ...

Ответы [ 5 ]

5 голосов
/ 21 ноября 2011

это еще один способ:

Integer i = 10;
while(--i>0) {
    System.out.println(i);
}

Когда я равен 0, а условие ложно ... так что ... будет напечатано от 9 до 1 (9 элементов)

Integer i = 10;
while(i-->0) {
    System.out.println(i);
}

Будет печатать от 9 до 0 ... (10 штук);

4 голосов
/ 21 ноября 2011

Последний способ разумен.Альтернатива - если у вас нет операторов break / continue - будет:

while (space > 0)
{
    // Code

    space--;
}
0 голосов
/ 21 ноября 2011

Когда вы пишете код, вы всегда должны помнить, что вы не просто пишете его, чтобы вы могли понять его сейчас ... это должно быть понятно любому будущему читателю (который может стать вами после того, как вы забыли) почему вы сделали это так, как вы сделали), пока они имеют некоторые знания кодирования. Мне кажется, что вы, возможно, пытаетесь повторно использовать переменную space только потому, что она у вас уже есть. В нет ничего плохого при запуске нового, если это увеличивает читабельность. Так что вы можете рассмотреть возможность использования int i = space; внутри цикла for - я уверен, что ваш компьютер справится с этим без переполнения стека, если вы простите мою паршивую игру; -)

Фактически, рассмотрите возможность рефакторинга вашего цикла в отдельный закрытый метод, который, разумеется, назван соответствующим образом для удобства чтения, передавая space в качестве аргумента и присваивая переменной возвращаемый результат. С радостью приведу пример кода, если вы объясните, чего вы пытаетесь достичь в цикле.

0 голосов
/ 21 ноября 2011

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

0 голосов
/ 21 ноября 2011

Использовать цикл while?

while (space > 0) { /* code */ space--; }

Если вам не нужно значение space в теле цикла:

while (space-- > 0) { /* code */ }
...