Pega do for estendido

12 respostas
CarlosEduardoDantas
reparem este código:
int [][] testeInt = {{1,2,3},{4,5},{6}};

   for(long x:testeInt[0]) { 
      System.out.println(x);
   }

Funciona beleza...

agora se voce mudar um pouquinho e fizer

int [][] testeInt = {{1,2,3},{4,5},{6}};

   for(long x[]:testeInt) { 
      System.out.println(x);
   }

gera erro de compilação. Alguém se arrisca a dizer o por que?

abraços

12 Respostas

CarlosEduardoDantas

de boa… o erro é o mesmo que fazer

int[] teste = {1,2,3};
long[] teste1 = {4,5,6};
	
teste1 = teste;
CarlosEduardoDantas

peguinha básico do switch

final char teste = 'c';
char cond = 'z';


switch cond {
   case: 'a' 
      System.out.println('a');
      break;
   case: 'b' 
      System.out.println('a');
      break;
  case: 'c' 
      System.out.println('c');
      break;
  case: teste 
      System.out.println('teste');
      break;
}

Erro de compilação… hehe

xandroalmeida

Você pode fazer um int ser um long sem cast
Agora você não pode fazer um array de int ser um array de long.

CarlosEduardoDantas

sim… nao pode fazer nem com conversao explicita

int[] teste = {1,2,3};
 long[] teste1 = {4,5,6};
 	
 teste1 = (long[])teste;

erro d novo

diogopontual

Esse do switch tem vários erros né. Mas acho q o vc queria falar tem relação com o fato de teste == ‘c’.

[],'s

CarlosEduardoDantas

tem sim…
nao compilei o código antes de rodar… :oops:

LPJava
caduengenheiro:
reparem este código:
int [][] testeInt = {{1,2,3},{4,5},{6}};

   for(long x:testeInt[0]) { 
      System.out.println(x);
   }

Funciona beleza...

agora se voce mudar um pouquinho e fizer

int [][] testeInt = {{1,2,3},{4,5},{6}};

   for(long x[]:testeInt) { 
      System.out.println(x);
   }

gera erro de compilação. Alguém se arrisca a dizer o por que?

abraços

bom pelo que vi.. a diferença que q vc ta querendo colocar um array bidimensional em um array unidimensional e isso nao eh permitido.

int [][] array
int [] array

sao diferentes.. pelo q analisei o erro ta ae...!

CarlosEduardoDantas

ne nao camilo

repara bem… estou usando um for estendido …

da mesma forma que voce declara

int[] x =  {1,2,3,4};
for (int y: x) {}

ps: nao compilei o codigo pra postar aki ta? rs

O
  • nao é permitida a conversao de array de primitivos. agora funciona! mudamos de long pra int
int [][] testeInt = {{1,2,3},{4,5},{6}};
		 
		    for(int x[]:testeInt) { 
		       System.out.println(x);
		    }
  • o switch da erro pois nao é permitido 2 cases iguais, ja que a variavel é final pode ser checada em tempo de compilacao (desconsiderando uns errinhos de sintaxe, é claro)
LPJava
caduengenheiro:
reparem este código:
int [][] testeInt = {{1,2,3},{4,5},{6}};

   for(long x:testeInt[0]) { 
      System.out.println(x);
   }

Funciona beleza...

agora se voce mudar um pouquinho e fizer

int [][] testeInt = {{1,2,3},{4,5},{6}};

   for(long x[]:testeInt) { 
      System.out.println(x);
   }

gera erro de compilação. Alguém se arrisca a dizer o por que?

abraços

O ERRo pq tenho tipos diferente dentro do for... isso nao é permitido.. por isso que dar erro.. long X int. to certo?

O
camilolopes:
caduengenheiro:
reparem este código:
int [][] testeInt = {{1,2,3},{4,5},{6}};

   for(long x:testeInt[0]) { 
      System.out.println(x);
   }

Funciona beleza...

agora se voce mudar um pouquinho e fizer

int [][] testeInt = {{1,2,3},{4,5},{6}};

   for(long x[]:testeInt) { 
      System.out.println(x);
   }

gera erro de compilação. Alguém se arrisca a dizer o por que!

int myInt = 10;
long myLong;

myLong = myInt;

System.out.println(myLong);

abraços

O ERRo pq tenho tipos diferente dentro do for... isso nao é permitido.. por isso que dar erro.. long X int. to certo?

Exatamente!

Mas tem-se que enteder o porque!

Vejamos:

int myInt   = 10;
		long myLong;
		
		myLong = myInt;
		
		System.out.println(myLong);

Roda perfeito, pois um "long" aceita "int", já que jamais teremos perda de precisão.

Mas...

int myInt   = 10;
		long myLong;
		
		// Existe uma conversão implícita
		myLong = myInt;
		
		System.out.println(myLong); // compiles and run fine!
		
		int[] arrInt = {1,2,3};
		
		// Type mismatch: cannot convert from int[] to long[]
		// long[] arrLong = arrInt;
		
		// Cannot cast from int[] to long[]
		// long[] arrLong = (long[]) arrInt;

Você não pode fazer cast porque infrige a seguinte regra:

to cast an object reference to an array type reference, the object must be an array of a component type that is compatible with the component type of the array type reference

os objetos "arrInt" e "arrLong" não são compatíveis!

Agora se fosse:

Integer[] arrInteger = {new Integer(1), new Integer(2), new Integer(3)};
		
		for (Number number : arrInteger)
		{
			System.out.println(number);
		}

Não teria problemas pois "Integer" IS-A "Number"

Repare que os tipos são diferentes, mas nem por isso ocorre erro, nem de compilacao nem de run-time

T

boas perguntas btw

Criado 23 de novembro de 2006
Ultima resposta 2 de dez. de 2006
Respostas 12
Participantes 6