eu preciso criar uma lista que utilize a idade do usuário como chave e o
nome como informação. Onde quando eu for buscar uma pessoa pela idade seja exibido o
nome da mesma. podendo ser cadastrada apenas uma pessoa por idade.
preciso solicitar ao usuário o num de pessoas cadastradas, a idade e o nome e ao termino devo listar todas as pessoas no seguinte formato
idade->nome
exemplo: 27-> Pedro
isso foi o que fiz mas algo errado não está certo
import java.util.Scanner;
public class Pessoa {
publicStringnome;publicintidade;Pessoa[]lista;Scannerin=newScanner(System.in);Pessoa[]cadastrar(Pessoapessoa){System.out.println("digite o número de pessoas para o cadastro: ");intnumero=in.nextInt();Pessoa[]lista=newPessoa[numero];for(inti=0;i<lista.length;i++){System.out.println("digite o nome da pessoa: ");pessoa.nome=in.next();System.out.println("digite a idade: ");pessoa.idade=in.nextInt();if(lista[i]==null){lista[i]=pessoa;}else{System.out.println("não foi possível cadastrar. ");}}returnlista;}
quando eu vou na classe aplicação, instancio uma pessoa e uso o método ele não retorna o nome e a idade
adriano_si
Cadê o código que você recupera o Array e tenta exibir? Como você está cadastrando as pessoas?
X
Xablau
como eu faria isso? estava pensando se não era pra usar ArrayList ou algo do gênero
adriano_si
Você só está cadastrando a lista e retornando ela no método de cadastro. Em nenhum momento você tenta exibir essa lista pelo código que você nos passou…
X
Xablau
e como eu faço para exibi-la?
adriano_si2 likes
Você precisa:
O método main pra poder começar a executar seu programa.
Chamar o método de cadastrar e inserir as Pessoas
Pegar a sua lista retornada no cadasto e iterar sobre ela usando o for (que você já aprendeu)
Dentro do seu for, para cada pessoa você usa o método (que também já tem no seu código) para imprimir o resultado da sua lista respeitando o formato do seu exercício.
Tenta usando isso que eu te disse e se tiver alguma dificuldade posta aí.
Esss exceção diz que está tentando acessar um objeto que não foi instanciado. Verifique se está carregando sua lista corretamente.
Enadrov1 like
Você está usando duas variavel lista uma como atributo de classe e uma no metodo cadastrar. Use apenas a lista que vc declara como atributo de classe e mude se metodo para void ao invés de Pessoa []
X
Xablau
acabei trocando o Pessoa[] lista = new Pessoa[numero]; no metodo de cadastro
por this.lista = new Pessoa[numero] e acabou funcionando.
X
Xablau
na vdd ainda tem um erro. quando eu cadastro 2 ou mais pessoas por exemplo: ana, 22 e pedro, 20
aparece na tela 2 vezes 20->pedro
Enadrov1 like
Mude seu metodo cadastrar para somente cadatro, sem que vc tenha que digitar os dados dentro dele. Você faria assim na sua aplicação:
voidcadastro(Pessoapessoa){System.out.println("digite o número de pessoas para o cadastro: ");intnumero=in.nextInt();this.lista=newPessoa[numero];for(inti=0;i<lista.length;i++){System.out.println("digite o nome da pessoa: ");nome=in.next();System.out.println("digite a idade: ");idade=in.nextInt();if(lista[i]==null){lista[i]=pessoa;}else{System.out.println("não foi possível cadastrar. ");}}
eu preciso que o usuário digite quantas pessoas ele quer cadastrar
Enadrov1 like
Cara na verdade o que esta acontecendo é o seguinte, quando você chama o método:
Então quando você chama esse metodo pela segunda vez a sua lista ja esta cheia. Poderia passar o código aqui mas prefiro te ajudar a fazer.
Se estiver de acordo vamos usar 3 classes:
Classe Pessoa:
onde só vai ter os dados da pessoa no caso nome e idade;
Classe Cadastro:
Onde vai ter o atributo: Pessoa lista[];
e os metodos cadastrar e imprimir
E a classe Programa
Que é a que vai executar o programa.
importjava.util.Scanner;publicclassPrograma{publicstaticvoidmain(Stringargs[]){Scannerin=newScanner(System.in);System.out.println("digite o número de pessoas para o cadastro: ");intnumeroDePessoas=Integer.parseInt(in.nextLine());Cadastrocadastro=newCadastro(numeroDePessoas);for(inti=0;i<numeroDePessoas;i++){System.out.println("digite o nome da pessoa: ");Stringnome=in.nextLine();System.out.println("digite a idade: ");intidade=Integer.parseInt(in.nextLine());cadastro.cadastrar(newPessoa(nome,idade));System.out.println("");}cadastro.imprimir();}}
Qualquer duvida estou a disposição
X
Xablau
poxa obrigado!!! resolveu meu problema.
mas eu gostaria de saber, o que eu estava fazendo de errado? porque minha lista ficava repetindo os nomes e a idade da última pessoa digitada? poderia me explicar isso?
Enadrov1 like
Você pede a quantidade de pessoas para cadastrar. Digamos que fosse 2 pessoas, você coloca esse valor no tamanho da lista
O loop é realizado duas vezes para a mesma pessoa, cadastrando a primeira pessoa nas duas posições da lista. E quando for adicionar a segunda pessoa a lista esta toda preenchida e por isso aparece duas vezes a mesma pessoa.
Para resolver dentro do if você poderia fazer o seguinte.
if(lista[i]==null){lista[i]=pessoa;break;}
Assim ele cadastra a pessoa e termina o loop, deixando a segunda posição como null, ou seja, livre para cadastrar a segunda pessoa.
X
Xablau
puxa, era isso mesmo. muito obrigado pela ajuda, entendi perfeitamente.