Cadastro de pessoas

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 {

public String nome;
public int idade;



Pessoa[] lista;



Scanner in = new Scanner(System.in);

Pessoa[]  cadastrar(Pessoa pessoa) {
	System.out.println("digite o número de pessoas para o cadastro: ");
	int numero = in.nextInt();
	 Pessoa[] lista = new Pessoa[numero];
	 
	for (int i = 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. ");
		}
		
	}
		
		return lista;
	
}

}

quando eu vou na classe aplicação, instancio uma pessoa e uso o método ele não retorna o nome e a idade :frowning:

Cadê o código que você recupera o Array e tenta exibir? Como você está cadastrando as pessoas?

como eu faria isso? estava pensando se não era pra usar ArrayList ou algo do gênero

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…

e como eu faço para exibi-la?

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. :wink:

Tenta usando isso que eu te disse e se tiver alguma dificuldade posta aí.

2 curtidas
 void imprimir(Pessoa pessoa) {
	 for(int i = 0; i<lista.length; i++) {
		 if(lista != null) {
		 System.out.println(lista[i].pessoa.nome + "->" + lista[i].pessoa.idade);
		 }
	 }
	
}

eu fiz esse metodo para imprimir mas ainda sim da uma exceção

public class Programa {

public static void main(String[] args) {
	
	Pessoa p = new Pessoa();
	
	p.cadastrar(p);
	
	
	
	p.imprimir(p);
}

}

o main

agradeço quem puder ajudar

Se você deixa:

System.out.println (lista [i].nome + "->" + lista [i].idade);

sim eu tirei o pessoa e coloquei desse jeito só que tbém deu a exceção na hora do imprimir :frowning:

Qual exceção

Exception in thread “main” java.lang.NullPointerException

at package.Pessoa.imprimir(Pessoa.java:46)
at package.Aplicacao.main(Aplicacao.java:13)

Esss exceção diz que está tentando acessar um objeto que não foi instanciado. Verifique se está carregando sua lista corretamente.

1 curtida

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 []

1 curtida

acabei trocando o Pessoa[] lista = new Pessoa[numero]; no metodo de cadastro
por this.lista = new Pessoa[numero] e acabou funcionando.

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

Mude seu metodo cadastrar para somente cadatro, sem que vc tenha que digitar os dados dentro dele. Você faria assim na sua aplicação:

Pessoa p1 = new Pessoa ();
p1.nome = "Eu";
p1.idade = 10;

Pessoa p2 = new Pessoa ();
p2.nome = "Eu";
p2.idade = 10;

Pesssoa pessoa = new Pessoa ();
pessoa.cadastrar (p1);
pessoa.cadastrar (p2);

e para imprimir:

pessoa.imprimir ();

Com o medoto imprimir sem argumento.

Tenta fazer isso que vai ficar bem legal

1 curtida

vou fazer sim, obrigado!