Escopo de variáveis

9 respostas
C

Olá a todos, sou iniciante na programação e to dando uma estudada no java.
Na verdade acho q minha dúvida é tão boba q tenho até um pouco de vergonha de perguntar =p

Mas vamos lá...
O seguinte programa dá erro:

int i = -1;

for (int i = 0; i < 10; i++) 
{
   System.out.println("olá!");
}

System.out.println(i);

A variável i dentro dos parâmetros do for não é uma variável local ao mesmo?
O que me impede de ter outra variável i fora do for?

9 Respostas

ViniGodoy

Nada. Esse programa não dá erro. Pelo menos, não por isso.

C

Desculpa, declarei o i no lugar errado, pode olhar outra vez?
Agradeço desde já.

marcelo.bellissimo

Agora sim vai dar erro porque você tem uma variável ‘i’ criada com escopo local… vai dar conflito com a variável do ‘for’ …

ViniGodoy
cake:
Desculpa, declarei o i no lugar errado, pode olhar outra vez? Agradeço desde já.

Agora acontece o seguinte. O seu i de cima existe desde o ponto onde foi declarado, inclusive dentro do for.
Mas no for você está tentando criar um segundo i. E aí está o erro.

O escopo daquele i da linha 1 é mais geral. Veja:

int a = 10;  

for (int i = 0; i < 10; i++)   
{  
   System.out.println("Olá " + i + " " + a);   //ok, a existe dentro do for.
}  

System.out.println(a);  
System.out.println(i);  //Ops, i não existe aqui, só dentro do for.
G

da erro por que você ja tinha declarado a variavel i dai ela é global daquela forma, mas se voce fizer isso no

for(i=0; i < 10; i++)

nao vai da erro pois você nao esta declarando novamente a variavel sim modificando o valor dela

C

Então eu não posso declarar variáveis de mesmo nome em blocos diferentes?

No C é aceitável ter um código do tipo:

int i, j=10;
   
for(i=0; i<100; i++)
{
   int j=999;
}
printf("%d", j); // imprime 10

No Java não funciona da mesma forma?

E

Cadê o “for (int i” no seu exemplo C?

a) Em C não se pode declarar diretamente uma variávei na primeira parte do for (mas em C++ isso é possível).
b) Em C++, se você declarar “for (int i” do jeito que você tentou fazer em Java, vai ter exatamente o mesmo erro.

Z111

Apesar das estruturas apresentarem semelhanças, o escopo não é o mesmo do C.

Neste caso, ambas as variáveis são consideradas locais, então não podem ser declaradas 2x.

Vingdel
Isso: [color=red](errado)[/color]
int i = 1;

for (int i = 0; i < 10; i++){
     //...
}// Seria i = 1
É diferente disso: [color=green](certo)[/color]
int i = 0;

for (i = 0; i < 10; i++){
     //...
}// i = 10
Que é diferente disso: [color=green](certo)[/color]
// "int i" não existe ainda

for (int i = 0; i < 10; i++){
     //...
}// "int i" não existe mais
Caso 1: Errado pois cria-se uma variável que já existe; Caso 2: Certo, pois dentro do for apenas é atribuido um valor a uma variável que já existe; Caso 3: Certo pois a variável em questão está sendo criada e recebendo um valor dentro do for.
Criado 23 de agosto de 2010
Ultima resposta 23 de ago. de 2010
Respostas 9
Participantes 7