ArrayList ...Dúvida!

6 respostas
L

Pessoal, estou fazendo um programa simples para ver se entendo um pouco sobre ArrayList, mas estou com algum problema lógico no código e uma dúvida lógica…

[b]* Como faço para chamar o menu inicial depois que o usuário digitou uma opção? … Gostaria de chamar o menu inicial depois de cadastrar as pessoas ou imprimir as mesmas.

* O problema esta na hora de inserir os dados no array, ele esta  simplesmente sobrescrevendo a pessoa cadastrada anteriormente.

[/b]

Bom… este programa que estou fazendo se baseia simplesmente em pegar o “nome”,“idade” e a “data de nascimento” da pessoa cadastrada. O que eu queria é que o ArrayList colocasse o novo objeto no final ad lista.

Irei colocar as 4 classes do programa para vcs darem uma olhada…

[color=blue]Classe mãe “Pessoas”[/color]

public class Pessoas {
	
	private String nome;
	private int idade;
	private String data_nasc;
	
	public void setNome(String nome){
		
		 this.nome = nome;		
	}
	
	public String getNome(){
		
		return nome;
	}
	
	public void setIdade(int idade){
		
		this.idade = idade;		
	}
	
	public int getIdade(){
		
		return idade;	
	}
	
	public void setData_nasc(String data_nasc){
		
		 this.data_nasc = data_nasc;
	}
	
	public String getData_nasc(){
		
		return data_nasc;
	}
	
	public Pessoas(String varNome, int varIdade, String varData_nasc){
		
		this.nome = varNome;
		this.idade = varIdade;
		this.data_nasc = varData_nasc;
		
	}
	

}

======================================================

[color=blue]Classe filha “Manipulação”[/color]

import java.util.ArrayList;
 import java.util.Scanner;

 public class Manipulacao extends Pessoas{
	
	ArrayList<Manipulacao> array = new ArrayList<Manipulacao>();
	Scanner s = new Scanner(System.in);
	
	public Manipulacao(String nome, int idade, String data_nasc){
		// construtor.
		super(nome, idade, data_nasc);
	}
	
	public void manipulacao_dados(Manipulacao obj){
				
		array.add(obj);	
		int cont = array.size(); // Pega a quantidade de pessoas inseridas.
		
		System.out.println("Existe "+cont+" pessoa(s) cadastrada(s).");
		
	}
	
	public void imprime(){
		
		int i = 0;
		
		do{
			
			if(array.size() >= 0){
				
				System.out.println("Nome: "+array.get(i).getNome());
				System.out.println("Idade: "+array.get(i).getIdade());
				System.out.println("Data de nascimento: "+array.get(i).getData_nasc());
				
			}else{
				System.out.println("O array não possui nenhum dado.");
			}
			
			i++;
		}while(i < array.size());
		
	}

}

======================================================

[color=blue]Classe “Menu” [/color]

import java.util.Scanner;

public class Menu {
	
	String nome, data;
	int opcao;
	
	Scanner s = new Scanner(System.in);

 public int mostra_menu(){	 // método de ativação do menu
	
	 while (opcao != 1 && opcao != 2 && opcao != 3){
		
		System.out.println("**** Registro de Pessoas ****");
		System.out.println("1 - Cadastrar");
		System.out.println("2 - Imprimir");
		System.out.println("3 - Sair");
		System.out.print("Opcão: ");
		opcao = s.nextInt();
			
		
	  }
	 
	 return opcao;
	
    } 
	 
   
  }

======================================================

[color=blue]Classe “Main” [/color]

import java.util.Scanner;

public class Main {

	
	public static void main(String[] args) {
		
		String nome ,data, opcao = ""; 
		int idade, op=0;
		
		//Manipulacao obj = null;
		Menu menu = new Menu(); // Obj da Classe Menu
		Scanner s = new Scanner(System.in);
	
		
		op = menu.mostra_menu();		
		
		switch(op){
		
		
		case 1:
			
	        while(!opcao.equalsIgnoreCase("Não")){		
			
	           Manipulacao obj = null;	
	        	
			   System.out.print("Nome: ");
			   nome = s.next();s.nextLine();
			
			   System.out.print("Idade: ");
			   idade = s.nextInt();
			
			   System.out.print("Data de nascimento: ");
			   data = s.next();
			
			   //passando os dados coletados para o contrutor de "Manipulacao"
		       obj = new Manipulacao(nome, idade, data);
			   obj.manipulacao_dados(obj);
			
			   System.out.println("\n");
				
		       System.out.println("Deseja cadastrar mais alguma pessoa? Sim/Não");
		       System.out.print("Opcão: ");
		       opcao = s.next();
		       		       
		    }
		
		      //obj.imprime();// só para ver se estava inserindo.
		
		break;
		
		case 2:
			
		//obj.imprime();
		
		break;
		
		case 3:
			
			System.out.print("Saindo....");
			System.exit(0);
			
		default:
			System.out.println("Erro de Opção !!!!!!!");
		    System.exit(0);
			
		}
		
	
     }// fim while
		

  }

6 Respostas

jvictorcf

Ola,

Olha, ta um pouco confuso, entao pode ser que eu nao esteja respondendo sua pergunta, mas vou tentar meu melhor.

A resposta rapida eh: Eu acho que seu ArrayList nunca contem mais de um objeto nunca porque ele nao eh static. Sendo assim, toda vez que voce instancia o objeto Manupulacao um novo ArrayList eh criado.

A resposta longa: Nao entendo porque voce fez Manipulacao sendo um tipo de Pessoa? Na minha visao, Manipulacao deveria ser uma classe que manipula dados (por exemplo, armazenar Pessoas num static ArrayList) e nao deveria extender a classe Pessoa.

Qualquer coisa da um toque.

Boa sorte.

Joao

L

jvictorcf:
Ola,

Olha, ta um pouco confuso, entao pode ser que eu nao esteja respondendo sua pergunta, mas vou tentar meu melhor.

A resposta rapida eh: Eu acho que seu ArrayList nunca contem mais de um objeto nunca porque ele nao eh static. Sendo assim, toda vez que voce instancia o objeto Manupulacao um novo ArrayList eh criado.

A resposta longa: Nao entendo porque voce fez Manipulacao sendo um tipo de Pessoa? Na minha visao, Manipulacao deveria ser uma classe que manipula dados (por exemplo, armazenar Pessoas num static ArrayList) e nao deveria extender a classe Pessoa.

Qualquer coisa da um toque.

Boa sorte.

Joao

Obrigado pela dica do static, era este o problema, em relação a “herança” concordo plenamente com vc que não precisava, na verdade usei a herança só para treinar mesmo. :smiley:
Eu só continuo na dúvida em relação de como eu faria para chamar o menu depois que o usuário escolheu uma opção e fez o que queria. :?

A

Cara, você sempre intancia o objeto Manipulacao dentro do menu, ai que está o problema, sempre cria um novo objeto.

objeto obj = new Manipulacao(nome, idade, data);

Cria o contrutor sem argumento e instancia fora do switch, depois é só usar o método de adicionar!

Seria melhor você separa o objeto Pessoa do Manipulacao (tira a herança) para simplificar, ao adicionar você instancia e passaria o objeto Pessoa no método do objeto Manipulacao e colocaria na sua ArrayList.

import java.util.Scanner;   
  
public class Main {   
  
       
    public static void main(String[] args) {   
           
        String nome ,data, opcao = "";   
        int idade, op=0;   
           
        //Manipulacao obj = null;   
        Menu menu = new Menu(); // Obj da Classe Menu   
        Scanner s = new Scanner(System.in);   
       
           
        op = menu.mostra_menu();           
           
        switch(op){   
           
           
        case 1:   
               
            while(!opcao.equalsIgnoreCase("Não")){         
               
               Manipulacao obj = null;     
                   
               System.out.print("Nome: ");   
               nome = s.next();s.nextLine();   
               
               System.out.print("Idade: ");   
               idade = s.nextInt();   
               
               System.out.print("Data de nascimento: ");   
               data = s.next();   
               
               //passando os dados coletados para o contrutor de "Manipulacao"   
               obj = new Manipulacao(nome, idade, data);   // Aqui está o problema!!!!
               obj.manipulacao_dados(obj);   
               
               System.out.println("\n");   
                   
               System.out.println("Deseja cadastrar mais alguma pessoa? Sim/Não");   
               System.out.print("Opcão: ");   
               opcao = s.next();   
                             
            }   
           
              //obj.imprime();// só para ver se estava inserindo.   
           
        break;   
           
        case 2:   
               
        //obj.imprime();   
           
        break;   
           
        case 3:   
               
            System.out.print("Saindo....");   
            System.exit(0);   
               
        default:   
            System.out.println("Erro de Opção !!!!!!!");   
            System.exit(0);   
               
        }   
           
       
     }// fim while   
           
  
  }
M

Repare no while que imprime o menu enquanto o usuário não sair do sitema!

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {

        String nome, data, opcao = "";
        int idade, op = 0;

        // Manipulacao obj = null;
        Menu menu = new Menu(); // Obj da Classe Menu
        Scanner s = new Scanner(System.in);

        /*****************************************************************************/
        /******* Este do while é para imprimir o menu enquanto o usuário não sair ****/
        /*****************************************************************************/
        do { // Este 
            op = menu.mostra_menu();

            switch (op) {

            case 1:

                while (!opcao.equalsIgnoreCase("Não")) {

                    Manipulacao obj = null;

                    System.out.print("Nome: ");
                    nome = s.next();
                    s.nextLine();

                    System.out.print("Idade: ");
                    idade = s.nextInt();

                    System.out.print("Data de nascimento: ");
                    data = s.next();

                    // passando os dados coletados para o contrutor de "Manipulacao"
                    obj = new Manipulacao(nome, idade, data); // Aqui está o problema!!!!
                    obj.manipulacao_dados(obj);

                    System.out.println("\n");

                    System.out.println("Deseja cadastrar mais alguma pessoa? Sim/Não");
                    System.out.print("Opcão: ");
                    opcao = s.next();

                }
                // obj.imprime();// só para ver se estava inserindo.
                break;
            case 2:
                // obj.imprime();
                break;
            case 3:
                System.out.print("Saindo....");
                System.exit(0);
            default:
                System.out.println("Erro de Opção !!!!!!!");
                System.exit(0);
            }
            /*****************************************************************************/
            /*******************  Talvez aqui você deve limpar a tela ********************/
            /*****************************************************************************/
        } while (op != 3);
    }
}

Espero ter t ajudado!

Abraços!

pmlm

Podes também tirar os System.exit(0)

L

Obrigado pelas dicas pessoal… é que ainda sou bem “noob” na linguagem e na lógica tb ainda :lol:

Criado 7 de maio de 2009
Ultima resposta 7 de mai. de 2009
Respostas 6
Participantes 5