Ae galera do GUJ, estou iniciando em Java e to com uma dificuldade nessa classe, consigo cadastrar o primeiro objeto, mas quando passa pro segundo na hora de entrar os dados ele pula o nome, não deixa eu digitar e vai direito pro campo idade já, pq isso?
Outra coisa, eu criei o vetor dos objetos dentro da classe Cadastro, ta certo fazer assim ou teria que criar o vetor dentro do método main e ai chamar a classe.função(objeto)
aonde vc está chamando o método pessoa?
porque pelo código ele está sempre usando a posição 0 do vetor
F
franciscaetano
Amigo, qual IDE você utiliza? já sabe contruir telas com swing?
tente colocar o i++ antes de pessoa[i] = new Pessoa(); , para adicionar antes de fazer o cadastro
Pessoa é uma clase. Vou declarar a estrutura, tenho 4 classes: principal(método main), Pessoa, Endereco e Cadastro. Pois bem, dentro da classe principal, eu criei um objeto do classe Cadastro, através de um menuzinho e talz chamo a função cadastrar(). Mas não tem a variável ‘i’ usada pra incrementar ali? Ou a cada chamada da classe Cadastro ela(a variável) é iniciada com 0?
Estou usando o Eclipse. Não sei mecher com swing ainda.
Olha o enunciado do exercício: [b]Implemente uma classe que simule um cadastro de pessoal. Esta classe deve armazenar até 100 pessoas (utilize a classe Pessoa) com seus respectivos endereços. Esta classe deve ter os seguintes comportamentos: permitir o cadastramento e exclusão de pessoas do cadastro.[
thiagofesta
gRoOve:
Pessoa é uma clase. Vou declarar a estrutura, tenho 4 classes: principal(método main), Pessoa, Endereco e Cadastro. Pois bem, dentro da classe principal, eu criei um objeto do classe Cadastro, através de um menuzinho e talz chamo a função cadastrar(). Mas não tem a variável ‘i’ usada pra incrementar ali? Ou a cada chamada da classe Cadastro ela(a variável) é iniciada com 0?
Estou usando o Eclipse. Não sei mecher com swing ainda.
Olha o enunciado do exercício: [b]Implemente uma classe que simule um cadastro de pessoal. Esta classe deve armazenar até 100 pessoas (utilize a classe Pessoa) com seus respectivos endereços. Esta classe deve ter os seguintes comportamentos: permitir o cadastramento e exclusão de pessoas do cadastro.[
Depende de como você chamar o método cadastra!!!
passa onde você chama o método cadastra ai.
gRoOve
Segue o metodo principal(está nomeado como teste…)
importjava.util.Scanner;publicclassteste{publicstaticvoidmain(String[]args){Cadastrocadastro=newCadastro();//Pessoa[] pessoa = new Pessoa[100];Scanners=newScanner(System.in);intopcao;do{System.out.println();System.out.println("Programa de Cadastro");System.out.println("1 - Cadastrar");System.out.println("2 - Exlcuir");System.out.println("3 - Exibir");System.out.println("4 - Sair");opcao=s.nextInt();switch(opcao){case1:cadastro.cadastrar();break;case2:cadastro.excluir();break;case3:cadastro.exibir();break;case4:System.exit(0);default:System.out.println("Opcao Invalida!");}}while(opcao!=4);}}
thiagofesta
chama assim cadastro.cadastrar(s);
no método seu la, coloca public void cadastrar(Scanner s)
e deleta o atributo S da classe Cadastro
e me diga se deu certo!
gRoOve
Não deu certo não…qual a função de passar ‘s’ ai?
Tipo quando vou entrar os dados, passa direito o nome, vai direto pra idade…eu programo em C, diria que tem algum lixo ali, hasuesahue
O problema é esse mesmo, a variável incrementa pro próximo objeto e talz, mas passa reto…
// Scanner s = new Scanner(System.in); ESSE ATRIBUTO TEM QUE SER REMOVIDO!!!!publicvoidcadastrar(Scanners){pessoa[i]=newPessoa();System.out.println("Nome: ");pessoa[i].setNome(s.nextLine());System.out.println("Idade: ");pessoa[i].setIdade(s.nextInt());System.out.println("CPF: ");pessoa[i].setCpf(s.nextInt());i++;}
Tenta ai e me avisa!
gRoOve
Foi exatamente assim que fiz, dessa forma já passa direito no primeiro objeto, do jeito que eu tava fazendo conseguia incluir o primeiro objeto e passava reto no segundo…
thiagofesta
Tem como anexar um .rar dos arquivos?
ou só dos arquivos .java já ajuda.
Kura
Eu não entendi o pq do vetor de objetos pessoa.
A sua classe de cadastro não cadrastaria uma pessoa de cada vez?
Kura
Arf. Mandei 2 vezes a mesma msg. Não tem como apagar msg não?
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?
Kura
Você não precisa limitar nada.
A classe Cadastro vai ser chamada quando uma pessoa estiver montada. Então, a classe vai fazer um único cadastro.
Depois que o cadastro for concluido, o programa acaba.
Quando outra pessoa for se cadastrar, o programa vai rodar todo de novo.
Só faria sentido esse vetor se vc fosse montar 100 pessoas antes de cadastrar.
Ou seja, todas as 100 pessoas digitariam seus dados e, só quando o número (100) fosse atingido é que o cadastro seria feito.
Não faz sentido, né?
Espero que tenha ajudado!
Kura
E caso vc quisesse montar as 100 pessoas antes do cadastro, você teria que percorrer esse vetor para cadastrar cada pessoa. Se não, como vc conseguiria enxergar cada uma? Você só enxergaria a primeira.
gRoOve
Mas digamos que eu queira cadastrar 10 pessoas, não tenho que ter 10 objetos? Consequentemente um array de objetos?
Kura
Então… depende.
Se quiser cadastrar as 10 ao mesmo tempo sim.
Mas ai seu programa teria que funcionar da seguinte maneira:
Uma pessoa digita o nome e a idade.
Logo em seguida, outra pessoa teria que digitar também o nome e a idade (isso sem o programa finalizar, sem fazer nada. de maneiras seguidas mesmo. depois da primeira pessoa digitar a idade, a segudna digita o nome e a idade)
E assim por diante.
Depois que 10 pessoas tiverem feito isso, ai sim que o programa vai cadastrar.
O certo não seria uma pessoa digitar os dados e ser cadastrada em seguida para, depois, outra pessoa se cadastrar?
Se sim, então não precisamos de vetor visto que cada cadastro será feito separadamente.
gRoOve
Mas veja o que o exercício pede:
13.Implemente uma classe que simule um cadastro de pessoal. Esta classe deve armazenar até 100 pessoas (utilize a classe Pessoa) com seus respectivos endereços. Esta classe deve ter os seguintes comportamentos: permitir o cadastramento e exclusão de pessoas do cadastro.
E como vou guardar os dados de 10 pessoas dentro de um objeto apenas? Como vou recuperar os dados das 10 pessoas depois?
Kura
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.
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?
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.
gRoOve
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:
importjava.util.Scanner;publicclassCadastro{privateintcont=0;//Conta a quantidade de registrosfinalintMAX=2;Scanners=newScanner(System.in);Pessoa[]pessoa=newPessoa[MAX];Endereco[]endereco=newEndereco[MAX];//Metodospublicvoidcadastrar(){if(cont==MAX)return;pessoa[cont]=newPessoa();//Instanciar o objeto pessoa referente a posição cont do arrayendereco[cont]=newEndereco();//Instanciar o objeto endereco referente a posição cont do arraySystem.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 tecladoSystem.out.println("Rua: ");endereco[cont].setRua(s.nextLine());pessoa[cont].setEndereco(endereco[cont]);cont++;}publicvoidexcluir(){Stringnome;System.out.println("Digite o nome que deseja exlcuir: ");nome=s.nextLine();for(inti=0;i<cont;i++){if(nome.equals(pessoa[i].getNome()))pessoa[i].setNome(null);}}publicvoidexibir(){for(inti=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?
thiagofesta
Para comparar com null faça:
if(pessoa[i].getNome()!=null){...}
thiagofesta
Na classe pessoa que deveria estar o endereço, algo assim:
publicclassPessoa
{
privateEnderecoendereco; // Uma pessoa irá ter apenas 1 endereço? se for assim está certo//Etodososatributosaqui
}
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:
publicclassPessoa
{
privateEnderecoendereco; // Uma pessoa irá ter apenas 1 endereço? se for assim está certo//EtodososatributosaquipublicEnderecogetEndereco(){
returnthis.endereco;}
}