Pourquoi une variable doit-elle être déclarée dans une initialisation de boucle for?

11
int v = 0;

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

}

Pourquoi cela n'est-il pas autorisé en Java?

Pourquoi devons-nous déclarer une variable vdans l'initialisation de la boucle for? Je sais que ce n'est pas une déclaration si je le fais comme ça, mais pourquoi Java n'autorise-t-il pas ce qui précède?

mightyandweakcoder
la source
nous ne le faisons pas; for(;;)
dehasi
3
vn'est pas autorisé car ce n'est pas une déclaration: c'est la même raison pour laquelle vous ne pouvez pas écrire v;par lui-même ailleurs.
Andy Turner
Vous n'en avez pas besoin pour une forboucle améliorée .
Arvind Kumar Avinash

Réponses:

14

Si vest déclaré avant la boucle, vous devez laisser la première partie de l'instruction for vide:

int v = 0;

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

Il n'y a aucun sens à simplement écrire v;.

Eran
la source
6

Votre déclaration de boucle est valide si vous supprimez les étrangers vdans la déclaration (en supposant qu'elle a vété déclarée au préalable):

Changez-le en for(; v < 2; v++)

Les trois modificateurs de la forboucle traditionnelle sont facultatifs en Java.

Exemples d'alternatives:

Ci-dessous, c'est la même chose qu'une while (true)boucle:

for (;;) {

}

Ajout d'incréments supplémentaires:

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

}

Ajout de conditions supplémentaires pour terminer la boucle:

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

}

Déclaration de plusieurs variables de même type:

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

}

Et évidemment, vous pouvez mélanger et assortir n'importe lequel de ces éléments comme vous le souhaitez, en laissant de côté ceux que vous voulez.

Nexevis
la source
3

Selon le doc java

La forme générale de l'instruction for peut être exprimée comme suit:

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

...

Les trois expressions de la boucle for sont facultatives

Signifie que vous pouvez créer une forboucle et laisser une partie de 3 expr vide. L'une des options est de déclarer int vavant la boucle:

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

Vous n'avez pas besoin de déclarer une variable dans le ForInit.

Comme d'autres l'ont souligné, vous pouvez simplement omettre le ForInit; mais vous pouvez également y utiliser une liste d'expressions d'instructions.

Par exemple, vous pouvez créer de nouvelles instances de classe, appeler des méthodes et affecter / incrémenter / décrémenter des variables:

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

(Cet exemple est absurde, mais légal)

Cependant, vous ne pouvez pas mélanger ces expressions d'instruction avec des déclarations de variables locales.

Andy Turner
la source
0

Vous n'en avez pas besoin pour une forboucle améliorée .

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
la source
0

int w = 0;

à la TV;

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

} vous avez déclaré v avant la boucle mais vous l'avez de nouveau utilisé sans aucune initialisation.

si vous utilisez w qui est déjà déclaré et initialisé auparavant, il n'y aura pas de problèmes.Comme ci-dessous,

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

}

Chandru
la source