Warum muss eine Variable in einer for-Schleifeninitialisierung deklariert werden?

11
int v = 0;

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

}

Warum ist das in Java nicht erlaubt?

Warum müssen wir die Variable vin der for-Schleifeninitialisierung deklarieren ? Ich weiß, dass es keine Aussage ist, wenn ich es so mache, aber warum erlaubt Java das oben nicht?

mächtiger und schwacher Codierer
quelle
wir nicht; for(;;)
Dehasi
3
vist nicht erlaubt, weil es keine Aussage ist: Es ist der gleiche Grund, warum Sie v;anderswo nicht alleine schreiben können.
Andy Turner
Sie benötigen es nicht für eine erweiterte forSchleife.
Arvind Kumar Avinash

Antworten:

14

Wenn vvor der Schleife deklariert wird, sollten Sie den ersten Teil der for-Anweisung leer lassen:

int v = 0;

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

Es hat keine Bedeutung, nur zu schreiben v;.

Eran
quelle
6

Ihre Schleifendeklaration ist gültig, wenn Sie das Fremde vin der Deklaration entfernen (vorausgesetzt, es vwurde zuvor deklariert):

Ändern Sie es in for(; v < 2; v++)

Alle drei Modifikatoren in der traditionellen forSchleife sind in Java optional.

Alternative Beispiele:

Unten ist das gleiche wie eine while (true)Schleife:

for (;;) {

}

Hinzufügen zusätzlicher Schritte:

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

}

Hinzufügen zusätzlicher Bedingungen zum Beenden der Schleife:

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

}

Deklarieren mehrerer Variablen desselben Typs:

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

}

Und natürlich können Sie diese beliebig kombinieren und ganz auslassen, ohne die gewünschten zu verwenden.

Nexevis
quelle
3

Laut dem Java-Dokument

Die allgemeine Form der for-Anweisung kann wie folgt ausgedrückt werden:

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

...

Die drei Ausdrücke der for-Schleife sind optional

Bedeutet, dass Sie eine forSchleife erstellen und einige von 3 Ausdrücken leer lassen können. Eine der Optionen ist deklarieren int vvor Schleife:

int v = 0;
for(; v<2; v++)
Ruslan
quelle
1

Sie müssen keine Variable in der deklarieren ForInit.

Wie andere bereits betont haben, können Sie das einfach weglassen ForInit. Sie können dort aber auch eine Liste von Anweisungsausdrücken verwenden.

Sie können beispielsweise neue Klasseninstanzen erstellen, Methoden aufrufen und Variablen zuweisen / inkrementieren / dekrementieren:

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

(Dieses Beispiel ist unsinnig, aber legal)

Sie können diese Anweisungsausdrücke jedoch nicht mit lokalen Variablendeklarationen mischen.

Andy Turner
quelle
0

Sie benötigen es nicht für eine erweiterte forSchleife.

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
quelle
0

int w = 0;

im Fernsehen;

für (v; v <2; v ++) {

} Sie haben v vor der Schleife deklariert , aber erneut ohne Initialisierung verwendet.

Wenn Sie w verwenden, das bereits zuvor deklariert und initialisiert wurde, treten keine Probleme auf.

für (; w <2; w ++) {

}}

Chandru
quelle