Cadastro de pessoas

Você coloca essa condição na classe Programa

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

mas aqui da um erro de compilação. eu não teria que colocar lista[topo] = pessoa?

Desculpa é que estou pelo celular não percebi o erro. Faltou atribiur a pessoa a lista.
lista [topo] = pessoa;

Se tiver mas erros de digitacao, foi mau é que pelo celular é dificil kkkk

1 curtida

mas dentro do metodo eu ainda preciso que o usuário digite o nome e a idade da pessoa. eu adicionei isso e o problema ainda persiste.

acho que devo está fazendo algo de errado

Voce vai digitar na classe programa

System.out.println ("Digite nome");
String nome = in.nextLine ();
System.out.println ("idade");
int idade = in.nextInt ();
cp.cadastrar(new Pessoa (nome,idade));

Não lembro se usei construtor na classe. Você sabe usar construtor

sei sim

Ai é so colocar esse codigo em um for e repetir quantas vezes vc colocou na variavel que tem a quantidade de pessoas para cadastrar

como assim? mas na aplicação eu não tenho a variável quant

Você não tem uma varial onde você armazenou a quatidade de pessoas que vai cadastrar

eu fiz aqui mas tá dando outro erro, amanhã vejo o que faço.

muito obrigado pela boa vontade e ajuda e tenha uma boa noite.

amanhã continuarei nessa saga

Que isso fico feliz em ajudar. Caso queira posso postar as três classes prontas ou se quiser continuar tentando fico a disposição para ajudar

tentarei sim, quando puder coloco aqui

import java.util.Scanner;

public class Pessoa {
	public String nome;
	public int idade;

	public Pessoa(String n, int i){
		nome  = n;
		idade = i;
	}

	public String getNome(){
		return nome;
	}

	public int idade(){
		return idade;
	}

	public String toString(){
		return "Nome: " + nome + " -> " + "Idade: " + idade;
	}
}
1 curtida
public class Cadastro {
	Pessoa lista[];
	int topo = -1;

	public Cadastro(int numeroDePessoas){
		this.lista = new Pessoa[numeroDePessoas];
	}

	void  cadastrar(Pessoa pessoa) {
		topo++;
		lista[topo] = pessoa;
	}

	void imprimir() {
	 for(int i = 0; i<lista.length; i++) {
		 if(lista != null) {
		 //System.out.println(lista[i].nome + "->" + lista[i].idade);
		 System.out.println(lista[i].toString());
		 }
	 }
}
}
1 curtida
import java.util.Scanner;

public class Programa {
	public static void main(String args[]){
		Scanner in = new Scanner(System.in);

		System.out.println("digite o número de pessoas para o cadastro: ");
		int numeroDePessoas = Integer.parseInt(in.nextLine());

		Cadastro cadastro = new Cadastro(numeroDePessoas);


		for(int i = 0; i < numeroDePessoas; i++){
			System.out.println("digite o nome da pessoa: ");
			String nome = in.nextLine();
			System.out.println("digite a idade: ");
			int idade = Integer.parseInt(in.nextLine());

			cadastro.cadastrar(new Pessoa(nome, idade));

			System.out.println("");
		}

		cadastro.imprimir();
		
	}
}

Qualquer duvida estou a disposição

1 curtida

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?

Você pede a quantidade de pessoas para cadastrar. Digamos que fosse 2 pessoas, você coloca esse valor no tamanho da lista

Pessoa lista[] = new Pessoa [2];

Então quando você dava o comando for:
for (int i = 0; i < lista.length; i++){
if (lista [i] == null){
lista [i] = pessoa;
}
}

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.

1 curtida

puxa, era isso mesmo. muito obrigado pela ajuda, entendi perfeitamente.