Manipulando vetor de objetos

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)

import java.util.Scanner;

public class Cadastro {
	private int max = 100;
	private int i = 0;

	
	Scanner s = new Scanner(System.in);
	Pessoa[] pessoa = new Pessoa[100];
	
	//Metodos
	public void cadastrar()
	{
		pessoa[i] = new Pessoa();
		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++;
	}
	
	public void excluir()
	{
		
	}
	
	public void exibir()
	{
		System.out.println("Nome: " + pessoa[i-1].getNome());
		System.out.println("Idade: " + pessoa[i-1].getIdade());
		System.out.println("CPF: " + pessoa[i-1].getCpf());
	}
}

aonde vc está chamando o método pessoa?
porque pelo código ele está sempre usando a posição 0 do vetor

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

    i++; 

    pessoa[i] = new Pessoa();   
    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());

ESQUECE O QUE DIGITEI!

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

[quote=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.[[/quote]

Depende de como você chamar o método cadastra!!!
passa onde você chama o método cadastra ai.

Segue o metodo principal(está nomeado como teste…)

import java.util.Scanner;

public class teste {
	public static void main(String[] args) {
		Cadastro cadastro = new Cadastro();
		//Pessoa[] pessoa = new Pessoa[100];
		Scanner s = new Scanner(System.in);
		int opcao;
		
		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)
			{
				case 1:
					cadastro.cadastrar();
					break;
				case 2:
					cadastro.excluir();
					break;
				case 3:
					cadastro.exibir();
					break;
				case 4:
					System.exit(0);
				default:
					System.out.println("Opcao Invalida!");
			}
		}while(opcao != 4);
	}
}

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!

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…

eu acho que é o Scanner…

tente assim:

switch(opcao) { case 1: cadastro.cadastrar(s); break; case 2: cadastro.excluir(); break; case 3: cadastro.exibir(); break; case 4: System.exit(0); default: System.out.println("Opcao Invalida!"); }

E

[code] // Scanner s = new Scanner(System.in); ESSE ATRIBUTO TEM QUE SER REMOVIDO!!!

public void cadastrar(Scanner s)
{
pessoa[i] = new Pessoa();
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++;  
 }[/code]

Tenta ai e me avisa!

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…

Tem como anexar um .rar dos arquivos?
ou só dos arquivos .java já ajuda.

Eu não entendi o pq do vetor de objetos pessoa.
A sua classe de cadastro não cadrastaria uma pessoa de cada vez?

Arf. Mandei 2 vezes a mesma msg. Não tem como apagar msg não?

Vejam esse link http://www.guj.com.br/posts/list/77982.java, era o maldito problema de buffer do C mesmo =((

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?

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!

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.

Mas digamos que eu queira cadastrar 10 pessoas, não tenho que ter 10 objetos? Consequentemente um array de objetos?

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.

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?