Por que uma variável deve ser declarada na inicialização do loop for?

11
int v = 0;

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

}

Por que isso não é permitido em Java?

Por que temos que declarar variável vna inicialização do loop for? Eu sei que não é uma declaração se eu fizer assim, mas por que o Java não permite o que foi dito acima?

mightyandweakcoder
fonte
nós não; for(;;)
dehasi 17/02
3
vnão é permitido porque não é uma declaração: é a mesma razão pela qual você não pode escrever v;sozinho em outro lugar.
Andy Turner
Você não precisa dele para um forloop aprimorado .
Arvind Kumar Avinash

Respostas:

14

Se vfor declarado antes do loop, você deve deixar a primeira parte da instrução for vazia:

int v = 0;

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

Não há sentido em escrever v;.

Eran
fonte
6

Sua declaração de loop é válida se você remover o estranho vna declaração (assumindo que vfoi declarado anteriormente):

Mude para for(; v < 2; v++)

Todos os três modificadores no forloop tradicional são opcionais em Java.

Exemplos de alternativas:

Abaixo está o mesmo que um while (true)loop:

for (;;) {

}

Adicionando incrementos extras:

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

}

Adicionando condições extras para finalizar o loop:

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

}

Declarando várias da mesma variável de tipo:

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

}

E, obviamente, você pode misturar e combinar com qualquer um deles, deixando completamente de fora o que quiser.

Nexevis
fonte
3

De acordo com o java doc

A forma geral da instrução for pode ser expressa da seguinte maneira:

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

...

As três expressões do loop for são opcionais

Significa que você pode criar um forloop e deixar alguns de 3 expr em branco. Uma das opções é declarar int vantes do loop:

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

Você não precisa declarar uma variável no ForInit.

Como outros já apontaram, você pode simplesmente omitir o ForInit; mas você também pode usar uma lista de expressões de instrução lá.

Por exemplo, você pode criar novas instâncias de classe, chamar métodos e atribuir / incrementar / diminuir variáveis:

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

(Este exemplo é absurdo, mas legal)

No entanto, você não pode misturar essas expressões de instrução com declarações de variáveis ​​locais.

Andy Turner
fonte
0

Você não precisa dele para um forloop aprimorado .

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

int w = 0;

na TV;

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

} você declarou v antes do loop, mas usou novamente sem nenhuma inicialização.

se você usar w que já foi declarado e inicializado anteriormente, não haverá problemas. como no código abaixo,

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

}

Chandru
fonte