Array

10 respostas
R

Estou fazendo o seguinte exercicio:

public class Array1 {

public static void main(String[] args) {

int[] numeros = new int[10];
for(int i = 0; i < 8; i++) {
       numeros[0] = i * 10;

        System.out.println(numeros[0]);
    }
}

}

  • Alguém poderia me explicar porque se eu colocar o System. out… após o colchete ele imprime o valor da última posição do array (índice 7, valor 70), e não o valor 0? Uma vez que está explicitado no p´roprio comando “numero[0]” a posição do array(que, nesse índice, contem o número 0).
    Nesse caso, percebi que, mesmo mudando o índice do array(para 1, 2, 3…) ele sempre imprime zero. Por quê?
  • Por outro lado, mantendo-se o “sout” como ele está no exercicio, mas trocando-se o índice do array para qualquer número, ele imprime 8 zeros em sequencia…por quê?

Grato!

10 Respostas

D

Amigo
Qdo vc coloca o system.out.println depois da chave, o for executa todos o array.
Depois dá o ultimo valor guardado no array.
Qdo vc coloca o Sysout. antes da chave ele imprime todas as vezes que passa pelo For.

Espero ter ajudado.
Caso precise ver como ele passa coloque em modo de depuração!!

R

Blz, essa parte eu entendi. Só não compreendo porque, mesmo explicitando a posição do array, ele não imprime o valor informado conforme aquela posição.

luciano.eti
Blz, essa parte eu entendi. Só não compreendo porque, mesmo explicitando a posição do array, ele não imprime o valor informado conforme aquela posição.
..vamos ver ...
public class Array1 {
	public static void main(String[] args) {
		int[] numeros = new int[10];

		for (int i = 0; i < 8; i++) {
			numeros[0] = i * 10;

			System.out.println(numeros[0]);
		}
	}

}
Quando vc usa este código a posição exibida sera sempre a '0', porém com valores distintos pois a cada loop vc sobreescreve a variavel.
public class Array1 {
	public static void main(String[] args) {
		int[] numeros = new int[10];

		for (int i = 0; i < 8; i++) {
			numeros[i] = i * 10;

			System.out.println(numeros[0]);
		}
	}

}
Quando usar este código,serão setadas as posições 0-7, porém somente a posição '0' está sendo exibida, seu valor é 0.
public class Array1 {
	public static void main(String[] args) {
		int[] numeros = new int[10];

		for (int i = 0; i < 8; i++) {
			numeros[i] = i * 10;

			System.out.println(numeros[i]);
		}
	}

}
...e aqui, as posições 0-7 serão setadas, e todas as posições são exibidas, com seus valores distintos...porém se o 'print' for colocado fora do loop, será exibido somente o último valor calculado, conforme o Diego disse.

[]'s

Trevisani

Acredito que o erro que voce nao esta entendendo esta aqui:

numeros[0] = i * 10;

Voce esta atribuindo sempre a posicao 0, ou seja, se voce colocar o syso dentro do loop, ele vai imprimir o valor da posicao 0 a cada loop. E como tu esta atribuindo todo loop para a posicao 0 o valor i * 10, quer dizer que vai sair 0, 10, 20, 30…
Se voce colocar o syso fora do loop, ele so vai pegar o ultimo valor atribuido para a posicao 0, que seria 70 no caso.

Modifique o seu codigo, coloque assim:

numeros[i] = i * 10;

Pois agora o loop vai atribuir 0, 10, 20, 30… para as posicoes 0, 1, 2, 3… respectivamente.
Assim, se voce colocar o syso dentro do loop, sempre vai sair 0, pois o loop so atribuira o valor para a posicao 0 uma unica vez (na primeira, pois depois ela partira para posicao 1, 2, 3…).
E se voce colocar o syso fora do loop, tambem saira 0, pelo mesmo motivo acima.

Ajudei? Ou compliquei?

leandro-maanaim

Olá bom dia a todos. Tb estou aprendendo arrays e pra ser sincero nao consegui captar qual é a duvida dele pq pelo que eu lí no livro (caelum) esse codigo aí eu entendi perfeitamente como funciona…Só aproveitando aki a duvida do nosso companheiro me apareceu uma pequena duvida tb. O resultado 70 é o valor atribuido da posição [0] ?
tipo…
numeros[0] = numeros[70]?
ou continua numeros[0] com o valor de 70?

Não sei se alguem vai entender minha duvida… qualquer coisa explico melhor depois.

hodrigohamalho

Hum sua pergunta ficou bastante confusa, mas pelo que entendi
é a segunda opção que você citou:
numeros[0] com o valor de 70.

numeros[0] = i * 10;

Quando o i é 7 ele multiplica por 10, e sobrescreve na posição numeros[0].

Jonatas_Emidio_de_So

O Array tem um conjunto de valores onde o que esta dentro do [] é a posição atual.
Quando fazemos new numeros[10]; é como se estivessemos criando 10 variaveis diferentes, onde eu tenho
numeros[0]
numeros[1]
numeros[2]

Nosso amigo acima sempre sobreescreve a variavel numeros[0] com um valor e no final imprime na tela esse valor atual.

e no caso da segunda duvida => numeros[0] = numeros[70] — foi uma comparação errada já que o valor dentro do [] é 70 e não existe a posição 70. numeros vai so até 10 posições.
Espero ter ajudado.

leandro-maanaim

ah… blz ajudou muito jonathas, entao o valor 70 fica em qual posição do array? é a posição [0] ou [7]?

R

O valor 70 fica na posição 7 do array:

numeros[0] = 0 (i = 0 * 10 = 0);

numeros[1] = 10 (i = 1 *  10 = 10);

numeros[2] = 20 (i = 2 * 10 = 20);

()

numeros[7] = 70 (i = 7 * 10 = 70);

BLZ?

PS.: Acho que a minha mensagem ao abrir o tópico ficou meio confusa, porque a dúvida que vc manifestou agora era parecida com a minha.
Ou seja, se no “sout” eu especifico a posição do array, por que ele imprime outro valor que não o valor da posição explicita(no caso, 0)?

D

O valor 70 fica na posição 7 do array:

numeros[0] = 0 (i = 0 * 10 = 0);

numeros[1] = 10 (i = 1 *  10 = 10);

numeros[2] = 20 (i = 2 * 10 = 20);

()

numeros[7] = 70 (i = 7 * 10 = 70);

BLZ?

PS.: Acho que a minha mensagem ao abrir o tópico ficou meio confusa, porque a dúvida que vc manifestou agora era parecida com a minha.
Ou seja, se no “sout” eu especifico a posição do array, por que ele imprime outro valor que não o valor da posição explicita(no caso, 0)?

Mas no caso do seu código:

numeros[0] = i * 10;

faz com que o 70 acabe na posição [0]. Porque vc está sempre sobrescrevendo o valor nessa posição.
Assim o melhor seria como já falaram mudar para:

numeros[i] = i * 10;

Desse modo sim ficaria conforme vc quer, numeros[0] == 0, numeros[1] == 10 … numeros[7] ==70.

Abraço

Criado 9 de julho de 2009
Ultima resposta 10 de jul. de 2009
Respostas 10
Participantes 8