Почему переменная должна быть объявлена ​​в инициализации цикла for?

11
int v = 0;

for (v; v<2; v++) {
    ...

}

Почему это не разрешено в Java?

Почему мы должны объявлять переменную vв инициализации цикла for? Я знаю, что это не утверждение, если я делаю это так, но почему Java не позволяет выше?

mightyandweakcoder
источник
мы не делаем; for(;;)
Дехаси
3
vне допускается, потому что это не утверждение: это та же самая причина, по которой вы не можете писать v;в другом месте.
Энди Тернер
Вам не нужно это для расширенного forцикла.
Арвинд Кумар Авинаш

Ответы:

14

Если vобъявлено до цикла, вы должны оставить первую часть инструкции for пустой:

int v = 0;

for (; v < 2; v++) {
    ...
}

Нет смысла просто писать v;.

Эран
источник
6

Ваше объявление цикла является действительным, если вы удалите постороннее vв объявлении (при условииv было объявлено заранее):

Измените это на for(; v < 2; v++)

Все три модификатора в традиционном forцикле являются дополнительными в Java.

Примеры альтернатив:

Ниже так же, как while (true)цикл:

for (;;) {

}

Добавление дополнительных приращений:

int j = 0;
for (int k = 0; k < 10; k++, j++) {

}

Добавление дополнительных условий для завершения цикла:

int j = 0;
for (int k = 0; k < 10 || j < 10; k++, j++) {

}

Объявление нескольких переменных одного типа:

for (int k = 0, j = 0; k < 10 || j < 10; k++, j++) {

}

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

Nexevis
источник
3

Согласно документу Java

Общая форма заявления for может быть выражена следующим образом:

for (initialization; termination; increment) {
    statement(s)
}

...

Три выражения цикла for являются необязательными

Означает, что вы можете создать forцикл и оставить некоторые из 3 expr пустыми. Один из вариантов - объявить int vперед циклом:

int v = 0;
for(; v<2; v++)
Руслан
источник
1

Вам не нужно объявлять переменную в ForInit.

Как уже отмечали другие, вы можете просто опустить ForInit; но вы также можете использовать список выражений операторов там.

Например, вы можете создавать новые экземпляры классов, вызывать методы и назначать / увеличивать / уменьшать переменные:

int v;
for (new String(), "".toString(), v = 0, v++;;);

(Этот пример бессмысленный, но законный)

Однако вы не можете смешивать эти выражения операторов с объявлениями локальных переменных.

Энди Тернер
источник
0

Вам не нужно это для расширенного forцикла.

public class Main {
    public static void main(String[] args) {
        int[] integers = { 10, 20, 30 };
        for (int x : integers) {
            System.out.println(x);
        }
    }
}
Арвинд Кумар Авинаш
источник
0

int w = 0;

на телевидении;

для (v; v <2; v ++) {

} вы объявили v перед циклом, но вы снова использовали без какой-либо инициализации.

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

для (; ш <2; ш ++) {

}

Чандру
источник