Perché una variabile deve essere dichiarata in un'inizializzazione del ciclo for?


11
int v = 0;

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

}

Perché questo non è consentito in Java?

Perché dobbiamo dichiarare la variabile nell'inizializzazione vdel ciclo for? So che non è un'affermazione se lo faccio in questo modo, ma perché Java non consente quanto sopra?


noi no; for(;;)
Dehasi

3
vnon è consentito perché non è un'affermazione: è la stessa ragione per cui non puoi scrivere v;da solo altrove.
Andy Turner,

Non è necessario per un forloop avanzato .
Arvind Kumar Avinash,

Risposte:


14

Se vviene dichiarato prima del ciclo, è necessario lasciare vuota la prima parte dell'istruzione for:

int v = 0;

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

Non ha senso scrivere v;.


6

La dichiarazione del ciclo è valida se si rimuove l'estraneo vnella dichiarazione (presupponendo che sia vstata precedentemente dichiarata):

Modificalo in for(; v < 2; v++)

Tutti e tre i modificatori nel forloop tradizionale sono opzionali in Java.

Esempi alternativi:

Di seguito è lo stesso di un while (true)ciclo:

for (;;) {

}

Aggiunta di incrementi extra:

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

}

Aggiunta di condizioni extra per terminare il ciclo:

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

}

Dichiarazione di multipli della stessa variabile di tipo:

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

}

E ovviamente puoi mescolare e abbinare uno di questi come vuoi, tralasciando completamente quelli che vuoi.


3

Secondo il java doc

La forma generale dell'istruzione for può essere espressa come segue:

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

...

Le tre espressioni del ciclo for sono facoltative

Significa che potresti creare forloop e lasciare alcuni dei 3 expr vuoti. Una delle opzioni è dichiarare int vprima del ciclo:

int v = 0;
for(; v<2; v++)

1

Non è necessario dichiarare una variabile in ForInit.

Come altri hanno sottolineato, puoi semplicemente omettere ForInit; ma puoi anche usare un elenco di espressioni di istruzioni lì.

Ad esempio, è possibile creare nuove istanze di classe, invocare metodi e assegnare / incrementare / decrementare le variabili:

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

(Questo esempio è privo di senso, ma legale)

Tuttavia, non è possibile combinare queste espressioni con dichiarazioni di variabili locali.


0

Non è necessario per un forloop avanzato .

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;

in tv;

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

} hai dichiarato v prima del ciclo ma l'hai usato di nuovo senza alcuna inizializzazione.

se usi w che è già stato dichiarato e inizializzato prima, non ci saranno problemi.

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

}

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.