[Resolvido]3 dúvidas

6 respostas
S

Olá a todos, fiz o simulado do Caelum, errei algumas questões por falta de atenção mas enfim, essas 3 me deixaram curioso.

Primeira dúvida: considere a seguinte classe:

public class array { public static void main(String args[]) { int[][] a = new int[10][10]; for (int[] is : a) { for (int i : is) { System.out.println(i); } } } }

É o seguinte, como que essa classe compila se a variavel i nunca é inicializada?

Segunda dúvida:

Considere a seguinte classe:

class xyz { public static void main(String... args) { int y; for (int x = 0; x < 10; ++x) { y = x % 5 + 2; } System.out.println(y); }

Por que essa classe não compila se a variável y é inicializada dentro do for?

E a última dúvida:

Considere a seguinte classe:

public class Fors{ static int i; public static void main(String args[]){ for(i=0;i<3;i++){ System.out.print(i); } for(int i=2; i<3;i++){ System.out.print(i); } int i; for(i=0;i<2;i++){ System.out.print(i); } System.out.print(Fors.i); } }

Pelo o que eu entendi no primeiro for ele chama o atributo estático i, portanto como ele chamou o atributo sem usar Fors.i?

6 Respostas

romarcio

No primeiro caso é um foreach, a variável “int i” é recebe um novo elemento de “is” a cada loop, ela nunca é inicializada fora do for.

for (int i : is) { System.out.println(i); }

No segundo caso você precisa inicializar a variável “int y;”

No terceiro caso, a variável estática pode ser usada dentro classe sem precisa fazer isso “Fors.i”, apenas isso basta “i”. A não ser que no método você tivesse uma variável local que também fosse chamada de i, dai deveria fazer a referencia “Fors.i” para usar a estática.

S

romarcio:
No primeiro caso é um foreach, a variável “int i” é recebe um novo elemento de “is” a cada loop, ela nunca é inicializada fora do for.

for (int i : is) { System.out.println(i); }


Deixe-me ver se eu compreendi. No, a variável i sempre ficará recebendo o valor de is?

Mas ela não foi inicializada dentro do for?

Entendi.

Obrigado pelas respostas.

Rodrigo_Sasaki

No 1 funciona porque está usando um Enhanced For… que tem uma estrutura um pouco diferente… leia esse artigo…

ja no segundo caso… se por algum motivo apocalíptico o seu for não for executado, a VM não vai saber qual o valor default da sua variável, então mesmo parecendo impossível o for não ser executado, é necessário ele ter um valor default no escopo do método.

entendeu?

gabrielfrios

Segundo caso:

E se ela não tivesse sido inicializada no for, qual seria o valor de y? Ninguem sabe, nem o compilador.

S

digaoneves:
No 1 funciona porque está usando um Enhanced For… que tem uma estrutura um pouco diferente… leia esse artigo…

ja no segundo caso… se por algum motivo apocalíptico o seu for não for executado, a VM não vai saber qual o valor default da sua variável, então mesmo parecendo impossível o for não ser executado, é necessário ele ter um valor default no escopo do método.

entendeu?

Entendi, é realmente faz sentido :?

Vou dar uma olhada nesse artigo que você passou, obrigado os 2 pelas respostas.

romarcio

Sim, é algo semelhante ao que acontece nesse tipo de for: for (int i = 0; i < 10; i++)
A variável i recebe o valor no memento que o for é inicializado. NO outro caso, ela recebe um valor a cada posição do for.

Sim, mas o problema ocorre fora do for em: System.out.println(y);
Se por acaso a variavel não entrar no for, o Y do System.out.println() não terá valor algum, então por isso precisa ser inicializada lá fora.

Criado 24 de abril de 2012
Ultima resposta 24 de abr. de 2012
Respostas 6
Participantes 4