Pega do for estendido

reparem este código:

[code]

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

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

[/code]

Funciona beleza…

agora se voce mudar um pouquinho e fizer

[code]

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

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

[/code]

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

abraços

de boa… o erro é o mesmo que fazer


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

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

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.

sim… nao pode fazer nem com conversao explicita


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

erro d novo

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

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

[quote=caduengenheiro]reparem este código:

[code]

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

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

[/code]

Funciona beleza…

agora se voce mudar um pouquinho e fizer

[code]

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

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

[/code]

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

abraços[/quote]

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…!

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

  • 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)

[quote=caduengenheiro]reparem este código:

[code]

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

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

[/code]

Funciona beleza…

agora se voce mudar um pouquinho e fizer

[code]

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

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

[/code]

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

abraços[/quote]

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

[quote=camilolopes][quote=caduengenheiro]reparem este código:

[code]

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

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

[/code]

Funciona beleza…

agora se voce mudar um pouquinho e fizer

[code]

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

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

[/code]

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[/quote]

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

Exatamente!

Mas tem-se que enteder o porque!

Vejamos:

[code] int myInt = 10;
long myLong;

	myLong = myInt;
	
	System.out.println(myLong);[/code]

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

Mas…

[code] 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;[/code]

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:

[code] Integer[] arrInteger = {new Integer(1), new Integer(2), new Integer(3)};

	for (Number number : arrInteger)
	{
		System.out.println(number);
	}[/code]

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

boas perguntas btw