Caso ninguem responda até la, a noite, se eu tiver tempo, entro na internet e pego o exercicio direito contigo.
Ai, se você quiser, a gente discute melhor por msn ou algo do tipo.
[quote=gRoOve]Vejam esse link http://www.guj.com.br/posts/list/77982.java, era o maldito problema de buffer do C mesmo =((
Kura, minha classe cadastro cadastra um por vez, mas preciso limitar a quantidade de objetos em 100…se declarasse no método main teria que passar pela função o objeto né? Sou novo em OOP, não tenho muita noção de como as coisas ficam melhor…O que vc sugere?[/quote]
Dentro da classe Cadastro a classe Pessoa que foi instânciada está correta.
Pode ser dessa forma. acredito que seja a melhor, se passar como parâmetro daria na mesma, ai instânciava na classe teste, e passava no contrutor da classe Cadastro, ai pegava do contrutor e joga em seus atributos, mas dessa forma, nesse caso, é pior.
Então vou deixar da forma mais fácil, a classe Pessoa sendo instânciada dentro da classe Cadastro, até aí consigo entrar com os dados e armazenar na sua devida posição dentro do array. Agora, como faço com a classe Endereco? Tenho que instância-lá dentro da classe Cadastro também? Criar um array como a classe Pessoa?
Olhem como eu fiz:
import java.util.Scanner;
public class Cadastro {
private int cont = 0; //Conta a quantidade de registros
final int MAX = 2;
Scanner s = new Scanner(System.in);
Pessoa[] pessoa = new Pessoa[MAX];
Endereco[] endereco = new Endereco[MAX];
//Metodos
public void cadastrar()
{
if(cont == MAX) return;
pessoa[cont] = new Pessoa(); //Instanciar o objeto pessoa referente a posição cont do array
endereco[cont] = new Endereco(); //Instanciar o objeto endereco referente a posição cont do array
System.out.println("Nome: ");
pessoa[cont].setNome(s.nextLine());
System.out.println("Idade: ");
pessoa[cont].setIdade(s.nextInt());
System.out.println("CPF: ");
pessoa[cont].setCpf(s.nextInt());
s.nextLine();//Pega o buffer do teclado
System.out.println("Rua: ");
endereco[cont].setRua(s.nextLine());
pessoa[cont].setEndereco(endereco[cont]);
cont++;
}
public void excluir()
{
String nome;
System.out.println("Digite o nome que deseja exlcuir: ");
nome = s.nextLine();
for(int i=0; i<cont; i++)
{
if(nome.equals(pessoa[i].getNome()))
pessoa[i].setNome(null);
}
}
public void exibir()
{
for(int i=0; i<cont; i++)
{
if(! (pessoa[i].getNome().equals(null)) )
{
System.out.println("Nome: " + pessoa[i].getNome());
System.out.println("Idade: " + pessoa[i].getIdade());
System.out.println("CPF: " + pessoa[i].getCpf());
System.out.println("Rua: " + pessoa[i].getEndereco().getRua());
System.out.println("");
}
}
}
}
Só uma dúvida na função exibir(), quero comprar o conteudo do nome com null, mas essa função não tá dando certo. Como eu faria ali?
Para comparar com null faça:
if(pessoa[i].getNome() != null){...}
Na classe pessoa que deveria estar o endereço, algo assim:
[code]public class Pessoa
{
private Endereco endereco; // Uma pessoa irá ter apenas 1 endereço? se for assim está certo
// E todos os atributos aqui
}[/code]
Dessa forma eu falo que a Pessoa possui um endereço, a cada cadastro o objeto Pessoa será preenchido, sendo assim, irá ter o endereço daquela pessoa…
Caso surgir dúvidas ao cadastrar o endereço dessa forma, faça assim:
[code]public class Pessoa
{
private Endereco endereco; // Uma pessoa irá ter apenas 1 endereço? se for assim está certo
// E todos os atributos aqui
public Endereco getEndereco()
{
return this.endereco;
}
}[/code]
ai onde está assim:
System.out.println("Rua: ");
endereco[cont].setRua(s.nextLine());
use dessa forma:
System.out.println("Rua: ");
pessoa[cont].getEndereco().setRua(s.nextLine());
Tipo, como vc viu no meu código ali, primeiro eu atribui os valores ao objeto endereco, depois coloquei-o dentro do objeto pessoa.
Porém eu tentei assim:
System.out.println("Rua: ");
pessoa[cont].getEndereco().setRua(s.nextLine());
E não deu certo não. O encapsulamento com set e get, pra acessar Endereco está feito na classe Pessoa.