Estava fazendo uns testes e me deparei com uma questão que não entendi.
Em um trecho de código onde o “For convencional” funciona normalmente,
ao utilizar o “For Each loop”, recebo um “IndexOutOfBounds Exception”.
Se o “For Each” funciona “automaticamente”, ele não deveria saber quantas vezes deve iterar?
Segue o código:
public class TestaArrayNaoStatic{
public int[] meuArray;
public void inicializaArray(int... numeros){
meuArray = numeros;
}
public static void main(String[] args){
TestaArrayNaoStatic teste = new TestaArrayNaoStatic();
teste.inicializaArray(1,2,3);
for(int i=0;i<3;i++){
System.out.println(teste.meuArray[i]);
}
// for(int n : teste.meuArray){ //Está acusando erro em tempo de execução: IndexOutOfBounds
//
// System.out.println(teste.meuArray[n]);
//
// }
}
}
Dentro do forEach, cada variavel n vai corresponder ao VALOR de cada posicao do vetor… e nao a um indice (0,1,2,3,etc…)
Como seus valores sao 1, 2 3, na terceira iteracao ele vai tentar acessar a posicao 3 (que é a QUARTA posicao por Java ser zero-index based) e ai vc ganha sua exceção bonitinha =D
Se seus valores fossem 7, 8 e 9… logo na primera iteração vc ia levar pau.
[quote=pmlm]No for each não tens o indice da posição array mas o próprio valor nessa posição.
O que tu queres é simplesmente:
for(int n : teste.meuArray){
System.out.println(n);
}
[/quote]
e isso mesmo, quando voce faz um for each o valor que fica a esqueda indica que ele e um dos muitos que estao dentro de um array, dai vc pode apenas imprimi-lo… senao nao teria significado tem o
FOR(int N : teste.meuArray )