Dúvidas de iniciante [nao resolvido]

12 respostas
I

Tenho um classe chamada AgendaTel(nome, endereco, email, tel), com métodos set e get para todas as variáveis.

Em outra classe chamada AgendaTelTeste, faço o seguinte:

AgendaTel variavel = new AgendaTel(“X”, “Y”, “Z”, 15); // Construtor sendo chamado
AgendaTel temporario[] = new AgendaTel[10]; //Um vetor com 10 posições

temporario[0] = variavel; //Na posição 0 é inserido a variavel acima
variavel.setNome(“Juliana”); //Mudo o nome somente da variavel

System.out.printf("\n %s %s %s", "O contato: ", temporario[0].getNome(), temporario[0].getEndereco());

Quando compilei obtive uma surpresa, o nome foi alterado para Juliana, como isso acontece, sendo que não mexi no vetor e só na variável, e também se estou imprimindo a primeira posição do vetor???

Na minha classe AgendaTel(), todos os métodos são public e as variáveis todas são private.

12 Respostas

cu_ringa

a explicação q vejo para isso é q

temporario[0] = variavel;

recebe uma referencia de um objeto(variavel) e não um valor, então qnd vc muda o objeto(variavel), e temporario[0] aponta para o mesmo endereço de variavel, esse tbm será mudado.

é +/- isso q quero dizer:

nome variavel      posição memoria

variavel            1056
temporario[0]      1056

qnd mudar o valor de variavel, temporario[0] tbm será alterado.

I

Bom não sei se deve ser isto, pq fiz um teste com inteiros do mesmo jeito acima, ou seja, ao invés de instanciar um objeto da classe que fiz, declarei um objeto do tipo inteiro, e fiz a mesma coisa, então ele imprimiu as duas posições corretas do vetor.

Mas se for isso que vc disse então o q devo fazer?

cu_ringa

se vc usar inteiro como esse exemplo não muda, pq ele recebe um valor e não uma referencia. objeto sempre recebe referencia. tipo primitivo sempre recebe valor.

int i1 = 1;
int i2 = 2;
		
int i[] = new int[2];
i[0] = i1;
i[1] = i2;
		
for(int j = 0; j < i.length; j++)
   System.out.println(i[j]);
		
i1 = 56;
		
for(int j = 0; j < i.length; j++)
   System.out.println(i[j]);

imprime

1
2
1
2
I

mas o que devo fazer então pra dar certo??? Vi que se eu instanciasse um novo objeto dava certo, mas não creio que esta seja uma solução, pois se eu tiver um vetor com 1000 posições, vou ter q instanciar 1000 objetos?? com certeza não??? vc tem a solução pra esse problema?

cu_ringa

eu não to conseguindo enteder ql é sua dúvida. pq se vc não alterar o valor de variavel num fica tudo certo ?

I

Estou usando vetor pq quero vários registros.

Sendo assim, eu quero construir um métoodo Inserir, onde o métodos possa usar a mesma variável para adicionar registros ao vetor, entendeu?

cu_ringa

coloque ai seu metodo inserir p mim ver

I

Vou colocar a parte interna do inserir

AgendaTel variavel = new AgendaTel(nome, endereco, email, tel) //passados por valor
temporario[temporario.lenght+1] = variavel

Na verdade eu ainda não tinha construido um método inserir, mas acho que deste jeito aqui vai dar certo, só que vai ocupar mta memória não vai??

J

Olá, pessoal, sou iniciante em java e gostaria que se alguém pudesse me ajudar estou com um problema. O problema é o seguinte. estou utilizando os métodos SET e GET, para entrada e saida de um vetor, más quando uso o System.out.println(getVetor()) ele só mostra o endereço de memoria e não o conteúdo do vetor. Como utilizar get e set para vetores. Se alguém souber agradeço. desde já obrigado.

rmarin

Jucelino, primeiramente aconselho você a abrir um novo post, assim outras pessoas que tiverem um problema parecido com o seu, terão suas dúvidas sanadas, ok? :thumbup:

LPJava

inicjava:
Tenho um classe chamada AgendaTel(nome, endereco, email, tel), com métodos set e get para todas as variáveis.

Em outra classe chamada AgendaTelTeste, faço o seguinte:

AgendaTel variavel = new AgendaTel(“X”, “Y”, “Z”, 15); // Construtor sendo chamado
AgendaTel temporario[] = new AgendaTel[10]; //Um vetor com 10 posições

temporario[0] = variavel; //Na posição 0 é inserido a variavel acima
variavel.setNome(“Juliana”); //Mudo o nome somente da variavel

System.out.printf("\n %s %s %s", "O contato: ", temporario[0].getNome(), temporario[0].getEndereco());

Quando compilei obtive uma surpresa, o nome foi alterado para Juliana, como isso acontece, sendo que não mexi no vetor e só na variável, e também se estou imprimindo a primeira posição do vetor???

Na minha classe AgendaTel(), todos os métodos são public e as variáveis todas são private.

vc disse que seu objeto “variavel” no metodo stNome recebe o argumento passado qu vai ficar na posição 0.

I

E é isso mesmo, só que depois eu mudo somente o conteudo do objeto 'variavel' e automaticamente a posição 0 do meu vetor é alterada, mas tudo bem, essa parte o cu_ringa já me explicou porque.

Tentei de outra forma um método inserir e fiz o seguinte:

[code]
public static void Inserir(String nome, String end, String email, int tel){
AgendaTel variavel = new AgendaTel(nome, end, email, tel);
temporario[contador] = variavel;
contador ++;
}

O meu contador é públic e static.

Desse jeito deu certo, mas gostaria de saber se é uma boa forma de inserção, ou tem outras melhores?s

Criado 30 de julho de 2006
Ultima resposta 31 de jul. de 2006
Respostas 12
Participantes 5