Dúvida nao entendo pq isso acontece!

7 respostas
H

Olá pessoal, primeiro POST!
To com uma dúvida aqui que nao consigo achar solucao… acredito que pra voces que manjam mais, é só bater o olho que vao conseguir resolver!

Eh o seguinte…

Eu tenho a classe Pessoa, que possui aqueles 2 atributos ali em baixo (idade e nome). Criei 4 métodos básicos, que simplesmente setam ou retornam esses valores, como voces podem ver abaixo:

public class Pessoa {
	
	int idade;
	String nome;
	
	public void SetIdade(int ida)
	{
		this.idade = ida;
	}
	
	public void setNome(String nom)
	{
	this.nome = nom;	
	}
	
	public int getIdade()
	{
		return this.idade;
	}
	
	public String getNome()
	{
	return this.nome;
	}

}

Agora eu tenho outra classe, chamada PreenchePessoa. Tudo que ela faz é instanciar a classe Pessoa, preencher ela com dados e jogar dentro de um vetor. É justamente aqui que vem a dúvida… observem o código… notem que eu inseri Pessoa duas vezes dentro do vetor… na primeira insercao eu inseri com o nome “Fabio” e idade “18”… na segunda insercao eu soh mudei a idade e inseri denovo…
Agora quando eu mando imprimir o conteúdo do vetor (lendo dele o objeto Pessoa e retornando os dados) a idade SEMPRE retorna 20… ou seja… a ultima idade que eu inseri… eu queria saber porque isso está ocorrendo. Eu ja tentei inserrir 20 idades diferentes, mas no fim das contas todos os elementos do vetor ficam com a MESMA idade… como se ele tivesse inserindo sempre o mesmo objeto ignorando os outros “setIdade” que eu passei.

Alguem pode me ajudar???

Mto obrigado!!!

import java.util.Vector;


public class PreenchePessoa {

	public Vector vet;
	Pessoa p;
	
	
	public void CriaPessoa()
	{
		vet = new Vector();
		p = new Pessoa();
		
		p.setNome("Fabio");
		
                p.SetIdade(18);
                vet.addElement(p);
		
                p.SetIdade(20);
                vet.addElement(p);
		
		Pessoa p2 = new Pessoa();
		for (int i=0; i<vet.size(); i++)
		{
			p2 = (Pessoa)vet.get(i);
			System.out.println(p2.getIdade());
		}
		
		
	}
	
}

7 Respostas

jcmird

O que acontece que vc tá sempre alterando o mesmo objeto e nao inserindo um objeto novo. Por sempre a ultimda idade que vc setou sempre vai aparece no print. Para resolver o seu problema vc que criar um objeto novo para cada posição do seu vetor.

Se vc quer incluir mais pessoas no seu vetor tem que criar novos objetos q nem abaixo:

p1 = new Pessoa();   
           
        p1.setNome("Fabio");   
           
                p1.SetIdade(18);   
                vet.addElement(p);   
p2 = new Pessoa();
p2.setNome("Jose");
p2.setIdade(22);
vet.addElement(p2)
jcmird

O que acontece que vc tá sempre alterando o mesmo objeto e nao inserindo um objeto novo. Por sempre a ultimda idade que vc setou sempre vai aparece no print. Para resolver o seu problema vc que criar um objeto novo para cada posição do seu vetor.

Se vc quer incluir mais pessoas no seu vetor tem que criar novos objetos q nem abaixo:

p1 = new Pessoa();   
           
        p1.setNome("Fabio");   
           
                p1.SetIdade(18);   
                vet.addElement(p);   
p2 = new Pessoa();
p2.setNome("Jose");
p2.setIdade(22);
vet.addElement(p2)
H

Ola muito obrigado. Nao acredito que era tao simples.

Erivaldo_Arce

Jcmird mais se no caso ele queira inserir uns 10 cara como q fikaria o codigo ??

jcmird

faz um um laço… por exemplo um for

vet = new Vector();  
for(int i=0; i<=20; i++){

      p = new Pessoa();     
             
        p.setNome("Fabio");     
                vet.addElement(p); 
}

Isso é um exemplo simples, mas você utilizar o Scanner para pegar as informações do teclado.

abs

K

extamente, tenta criar um método genérico que insira quantas pessoas forem necessárias, assim seu código fica melhor, tente usar a classe scanner pra pegar o que a pessoa digitar no console, ou então o JOptionPane :wink:

H

Pessoal, eu ja consegui resolver tudo após ler as dicas daqui… criei um método pra inserir… e dentro desse método ele sempre chama “new Pessoa()”, dessa maneira funciona corretamente. Porém, tenho outra dúvida. Eu estou fazendo uma aplicacao de Horario de Onibus em J2ME, e o armazenamento dos dados vai seguir o mesmo princípio desse código ai. Como sao varias linhas de onibus e pra cada linha eu preciso reinstanciar a classe… sera que isso nao vai ficar muito pesado pro ambiente J2ME?

Criado 10 de março de 2009
Ultima resposta 12 de mar. de 2009
Respostas 7
Participantes 4