Чому змінну необхідно оголосити в ініціалізації циклу?


11
int v = 0;

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

}

Чому це не дозволено на Java?

Чому нам потрібно оголосити змінну vв ініціалізації циклу? Я знаю, що це не твердження, якщо я це роблю так, але чому Java не дозволяє це сказати?


ми не робимо; for(;;)
дехасі

3
vне дозволено, оскільки це не твердження: це та сама причина, що ви не можете писати v;самостійно в іншому місці.
Енді Тернер

Вам це не потрібно для посиленого forциклу.
Арвінд Кумар Авінаш

Відповіді:


14

Якщо vце оголошено до циклу, ви повинні залишити першу частину для оператора порожнім:

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++) {

}

І очевидно, що ви можете змішувати і поєднувати будь-яке з них, як хочете, повністю залишаючи те, що хочете.


3

За словами java doc

Загальну форму твердження for можна виразити так:

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

...

Три вирази циклу for 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;

int v;

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

} ви оголосили v до циклу, але ви знову використовували без ініціалізації.

якщо ви використовуєте w, який вже був оголошений та ініціалізований раніше, тоді не буде жодних проблем.

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

}

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.