Dificuldade no Hashmap

13 respostas
Castellon

Bom dia pessoas!
Seguinte eu tenho um cadastro simples, inserir, excluir, consultar e listar.
Eu fiz o seguinte

public class cadastro {
	
		String menu = "\n MENU \n\n 1 - Novo \n 2 - Excluir \n 3 - Consultar \n 4 - Listar \n 5 - Sair.";
		int num = 6;
		int []array = new int[10];
		public void menu(){
			System.out.println(menu);
			cadastrocliente();
		}
		 HashMap<String, String> mapeamento = new HashMap<String, String>();
	//--------------------------------------------------------------------------------------------------------//	
		public void cadastrocliente(){
			System.out.println("------------------------------------");
			int num = Leitor.lerInteger("Qual a opção: ");
			System.out.println("------------------------------------");
			switch(num)
			{
				case 1:{
					Novo();
					break;
				}
				case 2:{
					Excluir();
					break;
				}
				case 3:{
					Consultar();
					break;
				}
				case 4:{
					Listar();
					break;
				}
				case 5:{
					System.out.println("Você acaba de sair.");
					return;
				}
				default:{
					System.out.println("\n**NÃO EXISTE**");
				}
			}
			cadastrocliente();
		}		
	//--------------------------------------------------------------------------------------------------------//	
		public void Novo() {
			 try {
				ClienteII ClienteII = new ClienteII();
				ClienteII.getCod_cliente();
				int cod_cliente = Leitor.lerInteger("Código do cliente: ");
				String nome_Cliente = Leitor.lerString("Nome do cliente: ");
				int tel_cliente = Leitor.lerInteger("Número do telefone: ");
				ClienteII c = new ClienteII();
				c.setCod_cliente(cod_cliente);
				c.setNome_Cliente(nome_Cliente);
				c.setTel_cliente(tel_cliente);
//				mapeamento.put("cod_cliente",String.valueOf(cod_cliente));
//				mapeamento.put("nome_Cliente", nome_Cliente);
//				mapeamento.put("tel_cliente", String.valueOf(tel_cliente));
			
				HashMap<String, String>  mapeamento = new HashMap();
				mapeamento.put("codigo do cliente ",String.valueOf(" "+cod_cliente));
				mapeamento.put("Nome ",  " " +nome_Cliente);
				mapeamento.put("Telefone ",String.valueOf(" "+tel_cliente));
				
				String cod_cli_Property = mapeamento.get("codigo do cliente");
				String nome_Property = mapeamento.get("Nome");
				String tel_Property = mapeamento.get("Telefone");
				System.out.println(mapeamento);
				
				System.out.println("\nINSERIDO COM SUCESSO");
			 } catch (Exception e) {
				 System.out.println("\nErro ao inserir!");
			 }
		}
	//--------------------------------------------------------------------------------------------------------//	
		public void Excluir(){
			try {
			 ClienteII clienteII = new ClienteII();
			 clienteII.getCod_cliente();
			 int cod_cliente = Leitor.lerInteger("Digite o código do cliente: ");
			 ClienteII c = new ClienteII();
			 c.setCod_cliente(cod_cliente);
			 	HashMap excluir = new HashMap();
			 	excluir.remove(cod_cliente);
				System.out.println("Excluido com sucesso!!");
			} catch (Exception e) {
				System.out.println("Erro!");
			}
		}
	//--------------------------------------------------------------------------------------------------------//	
		public void Consultar(){
				ClienteII cl = new ClienteII();
				cl.getCod_cliente();
				cl.getNome_Cliente();
				cl.getTel_cliente();
				int c = 0;
				int cod_cliente = Leitor.lerInteger("Digite o código do cliente  ");
				            try {
				                c = Integer.parseInt(String.valueOf(cod_cliente));
				                if( !mapeamento.containsKey(c))
				                    throw new Exception();
				               
				                System.out.println("CÓDIGO: " + mapeamento.get(c));
				                System.out.println("NOME: " + mapeamento.get(c)+ cl.getNome_Cliente());
				                System.out.println("TELEFONE: " + mapeamento.get(c)+ cl.getTel_cliente());
//				                System.out.println();
				            }
				            catch( Exception e){
				                System.out.println("Não existe aluno com essa matricula");        
				            }
		}
Só que na hora da consulta não retorna nada... o que eu estou fazendo de errado? e pra dizer bem a verdade não entendi muito bem esse HashMap.

13 Respostas

Castellon

OPa

Viajei no final (rsrs), é um cadastro de cliente mas eu coloquei como matricula de aluno…

:oops:

Balena

Primeiro as inserções na Hash são feitas da seguinte maneira, usando a variável que vc criou:

mapeamento.put(cod_cliente,nome_cliente);

o que vem antes da vírgula é a chave, para encontrar algo na tabela…
se você inserir como está ali no código, você estará colocando so dados da seguinte maneira

Chave Dado
“codigo do cliente " String.valueOf(” "+cod_cliente)

entende, quando você for buscar esse dado na tabela Hash, não vai mais encontrar, pois
só é possível buscar pela chave, se vc buscar pela String da chave, ele vai te retornar a tabela toda…

entendeu?

Castellon

+/- tem como vc colocar um código pra ver se eu entendo?

rs

Balena

Espera agora eu li de novo e to vendo uma bagunça aqui…
pra que vc quer guardar os dados do cliente em uma Hash?

sendo que vc cria um cliente pra cada vez que é feito um cadastro…

Não seria mais inteligente guardar os cliente em uma ArrayList?

Balena

Ficaria mais ou menos assim...

public void Novo() {  
              try {  
                 int cod_cliente = Leitor.lerInteger("Código do cliente: ");  
                 String nome_Cliente = Leitor.lerString("Nome do cliente: ");  
                 int tel_cliente = Leitor.lerInteger("Número do telefone: ");  
                 ClienteII c = new ClienteII();  
                 c.setCod_cliente(cod_cliente);  
                 c.setNome_Cliente(nome_Cliente);  
                 c.setTel_cliente(tel_cliente);  
               
                 ArrayList<Cliente> lista_de_clientes = new ArrayList<Cliente>();
                 lista_de_cliente.add(c);
  
                 System.out.println("INSERIDO COM SUCESSO");  
              } catch (Exception e) {  
                  System.out.println("Erro ao inserir!");  
              }  
         }

acho bem mais intuitivo

Castellon

É que é um exercicio e pede pra utilizar o HashMap, mais eu nao entendi muito bem pra que serve então to tendo dificuldade pra entender…rs

Balena

Então com a Hash fica ria assim...

public void Novo() {  
              try {  
                 int cod_cliente = Leitor.lerInteger("Código do cliente: ");  
                 String nome_Cliente = Leitor.lerString("Nome do cliente: ");  
                 int tel_cliente = Leitor.lerInteger("Número do telefone: ");  
                 ClienteII c = new ClienteII();  
                 c.setCod_cliente(cod_cliente);  
                 c.setNome_Cliente(nome_Cliente);  
                 c.setTel_cliente(tel_cliente);  
               
                 HashMap<String, ClienteII> lista_de_cliente = new HashMap<String, ClienteII>();
                 lista_de_cliente.put(cod_cliente,c);
                 //Aqui eu coloco o código como chave para que eu possa encontrar meus dados novamente.
  
                 System.out.println("INSERIDO COM SUCESSO");  
              } catch (Exception e) {  
                  System.out.println("Erro ao inserir!");  
              }  
         }

acho bem mais intuitivo

Balena

Castellon:
É que é um exercicio e pede pra utilizar o HashMap, mais eu nao entendi muito bem pra que serve então to tendo dificuldade pra entender…rs

O Hash é como ujma coleção, serve para que você armazene vários dados. Como se fosse um vetor, porém você pode armazenar o dado que quiser nele…
Se não me engano não implementa conceito de ordem…

Já leu algo sobre coleções?

Castellon

não li nada a respeito não…

Mas já vou procurar algo a respeito rs
Vlw pela dica.

Castellon

O código não cai na exceção ele aparece a mensagem "Inserido cm sucesso",
só que na hora q eu escolha a opção CONSULTAR, ele cai na exceção...

public void Consultar(){
				ClienteII cl = new ClienteII();
				cl.getCod_cliente();
				cl.getNome_Cliente();
				cl.getTel_cliente();
				int c = 0;
				int cod_cliente = Leitor.lerInteger("Digite o código do cliente  ");
				            try {
				                c = Integer.parseInt(String.valueOf(cod_cliente));
				                if( !mapeamento.containsKey(c))
				                    throw new Exception();
				               
				                System.out.println("CÓDIGO: " + mapeamento.get(c));
				                System.out.println("NOME: " + mapeamento.get(c)+ cl.getNome_Cliente());
				                System.out.println("TELEFONE: " + mapeamento.get(c)+ cl.getTel_cliente());
//				                System.out.println();
				            }
				            catch( Exception e){
				            	System.out.println("-----------------------------------");
				            	System.out.println("Não existe cliente com esse código");        
				            }
		}

Esse é o código.

Balena

mas é claro vê bem o que vc tá fazendo na hora de consultar…
dá uma olhada no tipo de retorno do método get da Hash
e veja se ta certo o que vc está fazendo para imprimir teu retorno

Castellon

Eu achei um site interessante sobre coleções e esta me dando alguma luz…

Caso venha surgir mais duvidas volto a postar.

Vlw pela atenção.

J

basicamente Map é composto por um par chave-valor.
sendo que a chave não pode se repetir.
um HashMap é ordenado, porém, não em uma ordem muito conveniente…
ele é ordenado pelo código hash da chave.

vamos a um exemplo. (desconsidere a ordenação do código hash :D)
se você usar

put("chave1","valor1"); put("chave2","valor2");
terá a seguinte estrutura…

Keys - Values
chave1 valor1
chave2 valor2

agora vamos supor que você faça o seguinte na sequência…

put("chave1","valor3");

a representação do map ficará assim…

Keys - Values
chave1 valor3
chave2 valor2

note que não foi inserido um novo par chave - valor, mas sim sobrescrito o valor de “chave1”

resumindo…
se o objeto chave não existir no map, será inserido um novo par chave-valor,
se o objeto chave já existir, o objeto valor desse objeto chave será sobrescrito.

e como você está utilizando HashMap. Recomendo que você implemente o método hashCode para todos suas classes que você deseja usar como chave.

obs.: pode haver chave nula… porém, apenas uma…

put(null,"qualquerValor");

espero que tenha ajudado :smiley:

Criado 9 de janeiro de 2009
Ultima resposta 10 de jan. de 2009
Respostas 13
Participantes 3