Não entendi essa atribuição [Resolvido]

6 respostas
charlesbraw

Galera,
Não consegui entender essa atribuição:

public class Main4 {
	public static void main(String[] args) {
		int []arr = {1,2,3,4};
		for ( int i : arr )
		{
		   arr[i] = 0;
		}
		for ( int i : arr )
		{
		   System.out.print(i);
		}
	}

}
//SAIDA = 0030

Porque não está zerando tudo?

outra coisa, apesar de ser uma questão de simulado para prova de certificação, fiquei com dúvida. Devo postar isso no fórum “Java Básico” ou aqui mesmo?
Valeu.

6 Respostas

ViniGodoy

O primeiro índice do array é 0, não 1. Esse código provavelmente dá um arrayIndexOutOfBoundsException.

charlesbraw

Então Vini,
Esse código compila e executa, sem arrayIndexOutOfBoundsException.
A saída é: 0030

Onde está

se eu trocar por

int []arr = {1,2,4,4}; ai sim , da arrayIndexOutOfBoundsException…

Mas com 3 funciona.
Fiquei confuso.

robsonsm

na primeria passagem i vale 1 (posicao 0) entao ele atribui o valor 0 na posicao 1
ficando assim : {1,0,3,4}

na segunda passagem o i vale 0 (posicao 1) entao ele atribui 0 na posicao 0 ficando assim:
{0,0,3,4}

na terceira passagem o i vale 3 (posicao 2) entao ele atribui o valor 0 na posicao 3 ficando assim: {0,0,3,0}

na quarta passagem o valor de i vale 0 (posicao 3), entao ele atribui o valor 0 na posicao 0 (novamente)

no final ficou assim: {0,0,3,0}

ViniGodoy

Rode com um debugger:

  1. Na primeira iteração:
    array[1] = 0;

O array fica:
{1,0,3,4}

  1. Na segunda iteração:
    array[0] = 0;

O array fica:
{0,0,3,4}

  1. Na terceira iteração:
    array[3] = 0;

O array fica:
{0,0,3,0}

  1. Na quarta iteração:
    array[0] = 0;

O array fica:
{0,0,3,0}

E termina seu for.

E

Dica nº 1 - nunca use o nome “i” dentro de um “foreach”. Ele vai lhe confundir o cérebro completamente. É que o “foreach” do Java é diferente do “foreach” do Javascript (que trabalha com índices em vez de usar os proprios elementos). No seu caso, troque o nome “i” por “x”. Você vai ver que isso já começa a desanuviar seu cérebro.

Dica nº 2 - para entender exatamente o que ocorre, sempre faça a seguinte conversão:

for (int x : array) {
}

==>

for (int i = 0; i < array.length; i++) {
    int x = array[i];
}
charlesbraw

Então galera,

Obrigado a todos.
Consegui entender.
O que aconteceu é que comecei a misturar os indice com a interação com os valores do array, aff baguncei tudo hehheh.

Mas agora sim deu para clarear.
Aproveitei e testei tambem pelo debug do eclipse…

Valeu galera.

Criado 14 de setembro de 2010
Ultima resposta 14 de set. de 2010
Respostas 6
Participantes 4