¿Por qué debe declararse una variable en una inicialización de bucle for?

11
int v = 0;

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

}

¿Por qué esto no está permitido en Java?

¿Por qué tenemos que declarar variables ven la inicialización del ciclo for? Sé que no es una declaración si lo hago así, pero ¿por qué Java no permite lo anterior?

poderoso y débil codificador
fuente
nosotros no for(;;)
dehasi
3
vno está permitido porque no es una declaración: es la misma razón por la que no puedes escribir v;solo en otro lugar.
Andy Turner
No lo necesita para un forbucle mejorado .
Arvind Kumar Avinash

Respuestas:

14

Si vse declara antes del ciclo, debe dejar vacía la primera parte de la instrucción for:

int v = 0;

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

No tiene sentido solo escribir v;.

Eran
fuente
6

Su declaración de bucle es válida si elimina lo extraño ven la declaración (suponiendo que vse haya declarado de antemano):

Cámbialo a for(; v < 2; v++)

Los tres modificadores en el forbucle tradicional son opcionales en Java.

Ejemplos de alternativas:

A continuación es lo mismo que un while (true)bucle:

for (;;) {

}

Agregar incrementos adicionales:

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

}

Agregar condiciones adicionales para terminar el ciclo:

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

}

Declarando múltiplo de la misma variable de tipo:

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

}

Y, obviamente, puede mezclar y combinar cualquiera de estos como desee, dejando completamente fuera los que desee.

Nexevis
fuente
3

De acuerdo con el documento de Java

La forma general de la declaración for se puede expresar de la siguiente manera:

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

...

Las tres expresiones del bucle for son opcionales

Significa que podría crear un forbucle y dejar algunos de 3 expr vacíos. Una de las opciones es declarar int vantes del bucle:

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

No tiene que declarar una variable en el ForInit.

Como otros han señalado, simplemente puede omitir el ForInit; pero también puede usar una lista de expresiones de declaración allí.

Por ejemplo, puede crear nuevas instancias de clase, invocar métodos y asignar / aumentar / disminuir variables:

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

(Este ejemplo no tiene sentido, pero es legal)

Sin embargo, no puede mezclar estas expresiones de declaración con declaraciones de variables locales.

Andy Turner
fuente
0

No lo necesita para un forbucle mejorado .

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

int w = 0;

En televisión;

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

} has declarado v antes del ciclo pero nuevamente lo usaste sin ninguna inicialización.

si usa w que ya se declaró e inicializó antes, entonces no habrá problemas, como el código siguiente,

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

}

Chandru
fuente