Duvida a respeito de array!

9 respostas
D
bem basico esse programa, só pra treinar! segue o codigo:
public class Pessoa {
	private long ra;
	private String nome;
	private String sobrenome;
	private String data;
	
	
	public void criarPessoa(long ra, String nome, String sobrenome, String data){
		this.ra = ra;
		this.nome = nome;
		this.sobrenome = sobrenome;
		this.data = data;
	}

	public void imprimirPessoa(){
		System.out.println("RA: " + ra);
		System.out.println("NOME: " + nome);
		System.out.println("SOBRENOME: " + sobrenome);
		System.out.println("DATA: " + data);
		System.out.println("------------------ // ------------------");
	}
}
import java.util.Scanner;

public class Principal {

	public static void main(String[] args) {
		Pessoa vpessoa[] = new Pessoa[5];
		Pessoa pessoa = new Pessoa();
		Scanner in = new Scanner(System.in);
		long ra;
		String nome, sobrenome, data;
		for(int i=0;i<2;i++){
			System.out.println("PREENCHA OS DADOS");
			System.out.println("RA");
			ra = in.nextLong();
			System.out.println("NOME");
			nome = in.next();
			System.out.println("SOBRENOME");
			sobrenome = in.next();
			System.out.println("DATA");
			data = in.next();
			pessoa.criarPessoa(ra, nome, sobrenome, data);
			vpessoa[i] = pessoa;
		}
		for(int i = 0; i<2; i++)
		vpessoa[i].imprimirPessoa();
		
	}
}

na hora de imprimir, imprime sempre o ultimo dado cadastrado, ql meu erro ae?

9 Respostas

A

Copiei seu código aqui e não houve qualquer tipo de problema, ele imprimiu as informações do array normal. Verifica se você não está enxergando somente o ultimo registro no console, role o console para cima e veja se não está lá.

T+

pmlm

O problema é que estás sempre a usar o mesmo objecto e não a criar um para cada posição do array.

O método criaPessoa também não tem razão de existir, este deveria ser sim um construtor.

public class Pessoa {  
    private long ra;  
    private String nome;  
    private String sobrenome;  
    private String data;  
     
    public Pessoa(long ra, String nome, String sobrenome, String data){  
        this.ra = ra;  
        this.nome = nome;  
        this.sobrenome = sobrenome;  
        this.data = data;  
    }  
(...)
}
E, a parte final do for:
pessoa = new Pessoa(ra, nome, sobrenome, data);  
 vpessoa[i] = pessoa;
D

andre.froes:
Copiei seu código aqui e não houve qualquer tipo de problema, ele imprimiu as informações do array normal. Verifica se você não está enxergando somente o ultimo registro no console, role o console para cima e veja se não está lá.

T+

então cara eu testei e testei aparece sempre o ultimo mesmo!

D
pmlm:
O problema é que estás sempre a usar o mesmo objecto e não a criar um para cada posição do array.

O método criaPessoa também não tem razão de existir, este deveria ser sim um construtor.

public class Pessoa {  
    private long ra;  
    private String nome;  
    private String sobrenome;  
    private String data;  
     
    public Pessoa(long ra, String nome, String sobrenome, String data){  
        this.ra = ra;  
        this.nome = nome;  
        this.sobrenome = sobrenome;  
        this.data = data;  
    }  


(...)
}
E, a parte final do for:
pessoa = new Pessoa(ra, nome, sobrenome, data);  
 vpessoa[i] = pessoa;

então eu tava pensando isso ae msm, ele cria somente 1, mas eu passei ele para o vetor, n sei pq ele n guardo!!
e a função do tipo Pessoa ta retornando oq?

gabrielmskate

Pelo que eu entendi, você está alterando o mesmo objeto… Parece que está mudando o primeiro objeto do array.

public class Pessoa2 {
	private long ra;
	private String nome;
	private String sobrenome;
	private String data;
	
	Pessoa2(long ra, String nome, String sobrenome, String data){
		this.ra = ra;
		this.nome = nome;
		this.sobrenome = sobrenome;
		this.data = data;
	}


	public void imprimirPessoa(){
		System.out.println("RA: " + ra);
		System.out.println("NOME: " + nome);
		System.out.println("SOBRENOME: " + sobrenome);
		System.out.println("DATA: " + data);
		System.out.println("------------------ // ------------------");
	}
}
import java.util.Scanner;

public class Principal2 {

	public static void main(String[] args) {
		Pessoa2 vpessoa[] = new Pessoa2[5];
		Scanner in = new Scanner(System.in);
		long ra;
		String nome, sobrenome, data;
		for(int i=0;i<2;i++){
			System.out.println("PREENCHA OS DADOS");
			System.out.println("RA");
			ra = in.nextLong();
			System.out.println("NOME");
			nome = in.next();
			System.out.println("SOBRENOME");
			sobrenome = in.next();
			System.out.println("DATA");
			data = in.next();
			Pessoa2 pessoa = new Pessoa2(ra, nome, sobrenome, data);
			vpessoa[i] = pessoa;
		}
		for(int i = 0; i<2; i++)
			vpessoa[i].imprimirPessoa();
		
	}
}
gabrielmskate
Opa... já haviam respondido... Mas só uma observação... Eu mudaria o método de imprimir para assim:
public String toString(){
		return "RA" + this.ra + "\n" +
				"Nome: " + this.nome + "\n" + 
				"Sobrenome" + this.sobrenome + "\n" +  
				"Data" + this.data +  "\n";
		
	}
E a chamada ficaria assim?
for(int i = 0; i<2; i++){
			System.out.println(vpessoa[i].toString());
		}
D

vlvv cara, era isso ae msm brigadao!
eu só n intendi essa linha

Pessoa2(long ra, String nome, String sobrenome, String data)
gabrielmskate

Esse linha aí, é o construtor da classe…
Sempre que você da new em algum objeto, é o construtor que é chamado.

Por padrão, em java o construtor é criado sozinho, mas fica desse jeito:

Pessoa2(){...}

E do modo que eu fiz, está com uma sobrecarga de construtor. Então sempre que você criar um objeto pessoa:

Pessoa2 pessoa = new Pessoa2(ra, nome, sobrenome, data);

Automaticamente o construtor é chamado.

Entendeu??

D

aaa, agora eu intendi, valeu!

Criado 9 de outubro de 2009
Ultima resposta 9 de out. de 2009
Respostas 9
Participantes 4