dúvidas no código do programa

9 respostas
Y

amigos

tô fazendo uma agenda eletrônica que deve ter um menu com as opções incluir, listar, alterar, excluir, consultar, gravar e sair. Comecei a fazer o código com os menus e a opção incluir

import java.util.Hashtable;
  public class Agenda {
    public static void main (String args[]) throws IOException{ 
      BufferedReader ler = new BufferedReader(new InputStreamReader(System.in)); 
      int c; 
      do{ 
        c = x.menu_select(); 
        switch(c){ 
          case 1: x.Cadastrar(); 
            break; 
          case 2: x.Listar(); 
            break; 
          case 3: x.Alterar(); 
            break; 
          case 4: x.Consultar(); 
            break; 
          case 5: x.Excluir(); 
            break; 
          case 6: x.Gravar(); 
            break; 
          case 7: System.exit(0); 
           } 
          }
         }
         while (c != 7); 
        } 

        public int menu_select() throws IOException{ 
           BufferedReader ler = new BufferedReader(new InputStreamReader(System.in)); 
           String c; 
           int a; 
           System.out.println("\n 1.Cadastrar"); 
           System.out.println("2.Listar"); 
           System.out.println("3.Alterar");
           System.out.println("4.Consultar");
           System.out.println("5.Excluir");
           System.out.println("6.Gravar");    
           System.out.println("7.Sair\n"); 

           do{ 
            System.out.print(">> Entre com a opção desejada: >> "); 
            c = ler.readLine(); 
            a = Integer.parseInt(c); 
           } 
            while (a < 0 || a > 8); 
            return a; 
           } 

      public void Cadastrar()throws IOException{ 
        String dados; 
          dados = x.Ler(); 
        String vetor[] = new String[]; 
          int c = 0; 
          BufferedReader ler = new BufferedReader(new InputStreamReader(System.in)); 
              System.out.println("Digite o nome: "); 
                vetor[0] = ler.readLine(); 
                  dados += vetor[0]; 
   }

agora, as minhas dúvidas:

a) quais alterações devem ser feitas no código para que os nomes sejam armazenados numa hashtable?

b) como ficaria o código para listar os nomes?

9 Respostas

BrunoBastosPJ

para armazenar em uma hash você vai precisar se uma chave vai usar o método put do hashtable que recebe 2 objects… não seria melhor usar um collection? vector ou arraylist?

Y

pq o professor lá da faculdade pediu que os nomes fossem armazenados numa hashtable mesmo

BrunoBastosPJ

certo, nesse método você esta usando um array, mas nao esta usando um loop… estranho… o que você pode fazer para adicionar os nomes em uma hash do jeito que esta teu codigo é

public void Cadastrar()throws IOException{
        String dados;
          dados = x.Ler();
          int c = 0;
          BufferedReader ler = new BufferedReader(new InputStreamReader(System.in));
              System.out.println("Digite o nome: ");
               dados = ler.readLine();
               Hashtable hash = new Hashtable();
              hash.put("1",dados);
   }

na verdade esse método não faz nada porque o hash esta sendo declarado dentro do método, mas como antes já estava assim ai está :wink:

Y

bom, na verdade o professor só pediu pra fazer uma agenda com um menu com essas opções que citei. o menu pode ser feito através de um loop infinito e na inclusão, os nomes tem que ser armazenados numa hashtable. Eu aproveitei alguns códigos que achei aqui no fórum e na internet e acabei fazendo dessa forma.

BrunoBastosPJ

certo, para começar seria bom você criar uma classe Agenda por exemplo que contenha todos os atributos menos o nome. depois você cria uma classe Cadastro que cadastrs os dados da pessoa, essa classe cadastro tem como atributo uma hashtable. ai você cria um método assim nessa classe.

public boolean put(String nome, Agenda obj){
  if (nome == null)
    return false;
  hashtable.put(nome,obj);
  return true;
}

lembrando que se for inserir nomes repitidos o hash vai gravar os dados por cima. seria interessante tratar isso tambem

Y

deixa eu ver se eu entendi… acha melhor eu criar uma classe para cada opção da agenda, tipo uma classe para alterar, outra pra cadastrar, etc… seria isso?

BrunoBastosPJ

não, você vai cria uma classe que tenha os dados de cada pessoa na agenda, como endereço, telefone, email etc… Depois você vai criar uma classe que manipule o hashtable de acordo com o nome da pessoa. Nessa classe que manipula o hash você vai fazer os cadastros e as alterações, exclusões…

Na classe que manipula o hash (Cadastro, por exemplo). vamos supor o método cadastrar. na classe agente deve ter um construtor com 2 parametros String

public void cadastrar(String nome, String email, String tel){  
  hash.put(nome, new Agenda(email,nome));
}

nesse codigo você esta ligando o nome do cidadão com os dados da agenda.

Y

olha só, eu fiz da seguinte forma:

import java.io.*;
import java.util.Hashtable; 
  public class Agenda { 
    public static void main (String args[]) throws IOException{ 
     Agenda x = new Agenda(); 
      BufferedReader ler = new BufferedReader(new InputStreamReader(System.in)); 
      int c; 
      do{ 
        c = x.menu_select(); 
        switch(c){ 
          case 1: x.Cadastrar(); 
            break; 
          case 2: System.exit(0); 
           } 
          }  
         while (c >= 2); 
        } 

        public int menu_select() throws IOException{ 
           BufferedReader ler = new BufferedReader(new InputStreamReader(System.in)); 
           String c; 
           int a; 
           System.out.println("\n 1.Cadastrar"); 

           do{ 
            System.out.print(">> Entre com a opção desejada: >> "); 
            c = ler.readLine(); 
            a = Integer.parseInt(c); 
           } 
            while (a < 0 || a >= 2); 
            return a; 
           } 
            public void Cadastrar(String nome, String tel){  
            hash.put(nome, new Agenda(nome,tel));
              System.out.println ("Digite o nome: ");
              System.out.println ("Digite o telefone: ");  
              Hashtable hash = new Hashtable(); 
             }
}

e apresentou os seguintes erros (em negrito)

case 1: [b]x[/b].Cadastrar(); 
                 ^

        [b]hash[/b].put(nome, [b]new[/b] Agenda(nome,tel));
BrunoBastosPJ

não existe esse método cadastrar() o método cadastrar receve 2 strings. voce não pode chamar o has.put antes de criar esse objeto né :wink:

Criado 4 de julho de 2006
Ultima resposta 5 de jul. de 2006
Respostas 9
Participantes 2