Dlaczego zmienną należy zadeklarować w inicjalizacji pętli for?

11
int v = 0;

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

}

Dlaczego nie jest to dozwolone w Javie?

Dlaczego musimy zadeklarować zmienną vw inicjalizacji pętli for? Wiem, że nie jest to stwierdzenie, jeśli robię to w ten sposób, ale dlaczego Java nie pozwala na powyższe?

mightyandweakcoder
źródło
my nie; for(;;)
dehasi
3
vnie jest dozwolone, ponieważ nie jest to stwierdzenie: jest to ten sam powód, dla którego nie można pisać v;samodzielnie w innym miejscu.
Andy Turner
Nie potrzebujesz go do ulepszonej forpętli.
Arvind Kumar Avinash

Odpowiedzi:

14

Jeśli vzadeklarowano przed pętlą, należy pozostawić pierwszą część instrukcji for pustą:

int v = 0;

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

Nie ma sensu po prostu pisać v;.

Eran
źródło
6

Twoja deklaracja pętli jest ważna, jeśli usuniesz z niej dane zewnętrzne v(zakładając, że vzostała wcześniej zadeklarowana):

Zmień to na for(; v < 2; v++)

Wszystkie trzy modyfikatory w tradycyjnej forpętli są opcjonalne w Javie.

Przykłady alternatyw:

Poniżej jest to samo, co while (true)pętla:

for (;;) {

}

Dodawanie dodatkowych przyrostów:

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

}

Dodanie dodatkowych warunków w celu zakończenia pętli:

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

}

Deklarowanie wielokrotności zmiennej tego samego typu:

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

}

I oczywiście możesz mieszać i dopasowywać dowolne z nich, jak chcesz, całkowicie pomijając te, które chcesz.

Nexevis
źródło
3

Według dokumentu java

Ogólną formę instrukcji for można wyrazić w następujący sposób:

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

...

Trzy wyrażenia pętli for są opcjonalne

Oznacza, że ​​można utworzyć forpętlę i pozostawić 3 wyrażenia puste. Jedną z opcji jest deklaracja int vprzed pętlą:

int v = 0;
for(; v<2; v++)
Ruslan
źródło
1

Nie musisz deklarować zmiennej w ForInit.

Jak zauważyli inni, możesz po prostu pominąć ForInit; ale możesz także użyć tam listy wyrażeń.

Na przykład możesz tworzyć nowe wystąpienia klasy, wywoływać metody i przypisywać zmienne / increment / decrement:

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

(Ten przykład jest bezsensowny, ale legalny)

Nie można jednak mieszać tych wyrażeń instrukcji z deklaracjami zmiennych lokalnych.

Andy Turner
źródło
0

Nie potrzebujesz go do ulepszonej forpętli.

public class Main {
    public static void main(String[] args) {
        int[] integers = { 10, 20, 30 };
        for (int x : integers) {
            System.out.println(x);
        }
    }
}
Arvind Kumar Avinash
źródło
0

int w = 0;

w telewizji;

dla (v; v <2; v ++) {

} zadeklarowałeś v przed pętlą, ale ponownie użyłeś bez jakiejkolwiek inicjalizacji.

jeśli użyjesz w który został już zadeklarowany i zainicjowany wcześniej, nie będzie żadnych problemów. na przykład poniższy kod,

dla (; w <2; w ++) {

}

Chandru
źródło