Cadastro de pessoas

ainda continua imprimindo errado :frowning:

Posta se novo código de cadastro

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

Cara na verdade o que esta acontecendo é o seguinte, quando você chama o método:

cadastro(pessoa);

você cadastra esta pessoa duas vezes, por causa do comando:
for (int i = 0; i<lista.length; i++) {
…}

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.

1 curtida
public class Pessoa {
          String nome;
          int idade;
}

public class CadastroDePessoas{
          public Pessoa lista[];
          public void cadastrar(Pessoa pessoa){
          }
          public void imprimir(){
          }
}

public class Programa {
           public static void main(String args[]){
           }
}

As classes seriam assim

mas eu preciso que o usuário digite o número de pessoas para o cadastro

E vai digitar mas na classe programa, não na cadastro

e como meu metodo cadastro vai saber quantas pessoas ele deve cadastrar?

CadastroDePessoas cp = new CadastroDePessoas ();
System.out.println ("digite quantidade");
int quant = in.nextInt ();
cp.lista = new lista [quant];

vou tentar desse jeito

Esso vai na aplicação ou seja no metodo main da classe Programa. E nessa classe tb vai digitar o nome e a idade

aqui não seria = new Pessoa[quant]?

Nao seria lista que é onde vai cadastrar as pessoas na classe CadastroDePessoas

como eu arrumo esse negocio de ficar cadastrando a mesma pessoa 2 vezes? o que fiz de errado no meu método?

mas da erro de compilação quando eu ponho lista

Pra concetar se código.
Crie um atributo por exemplo:
int topo = -1;

No metodo remove o for e faz o seguinte:
topo++;
lista [topo] = pessoa;

Vou escrever classe por classe aqui

e qual seria a condição para que isso aconteça? se a lista[topo] == null aí eu devo inserir a pessoa na posição topo++?

public class CadastroDePessoas {

Pessoa lista [];
int topo= -1;

public void cadatrar (Pessoa pessoa){
topo = topo+1;
lista [topo];
}

public void imprimir (){
for (int i = 0; i < lista.length; i++){
System.out.println ("nome: " + lista [i].nome + " -> " + lista [i].idade);
}
}
}

Você coloca essa condição na classe Programa

if (cp.topo < cp.lista.length){
cp.cadastro (pessoa)
}else {
System.out.println ("Lista cheia");
}