Foros del Web » Programación para mayores de 30 ;) » Java »

[SOLUCIONADO] Acceder a Key del HashMap

Estas en el tema de Acceder a Key del HashMap en el foro de Java en Foros del Web. Muy buenas, ando desesperado intentando resolver este ejercicio. Trata de un Taller mecánico, en el que puedo añadir partes, listar todos, mostrar partes asociados a ...
  #1 (permalink)  
Antiguo 07/04/2013, 09:20
Avatar de Atorort  
Fecha de Ingreso: abril-2010
Ubicación: Valencia
Mensajes: 127
Antigüedad: 14 años
Puntos: 0
Acceder a Key del HashMap

Muy buenas, ando desesperado intentando resolver este ejercicio. Trata de un Taller mecánico, en el que puedo añadir partes, listar todos, mostrar partes asociados a matrícula, y eliminar partes.

La actividad la planteo con un HashMap<Matricula,ArrayList> (matrícula es un objeto de la clase Matricula, y el ArrayList contiene los partes asociados).


Mi problema llega en el método mostrar(), y lógicamente el eliminar() no lo tengo hecho porque no consigo acceder a la key matrícula de la manera adecuada.
El containsKey(m) siempre me devuelve False.
Dejo el código:

Código Java:
Ver original
  1. public class Gestion {
  2.     HashMap<Matricula,ArrayList<Partes>> HashPartes = new HashMap<Matricula,ArrayList<Partes>>();
  3.    
  4.     /*anadir Matricula ira asociado a anadirParte porque en el ejercicio especifica que lo que se dan de alta son partes,
  5.     por tanto debe haber una matricula asociada a los mismos. En caso de ya existir la matrícula como Key en el HashMap,
  6.     añadimos el parte al Array de partes asociados a esta.*/
  7.    
  8.    
  9.     //[0]Añadir un parte
  10.     public void anadirParte(){
  11.         Partes parte;
  12.        
  13.         System.out.println("Introduce la matricula:");
  14.         Matricula m = anadirMatricula();
  15.        
  16.         System.out.println("Introduce el código del parte:");
  17.         int codigo = Lector.leerInt();
  18.        
  19.         System.out.println("Introduce la descripción del parte:");
  20.         String descripcion = Lector.leerString();
  21.        
  22.         System.out.println("Introduce el importe del parte:");
  23.         double importe = Lector.leerDouble();
  24.        
  25.         parte = new Partes(m,codigo, descripcion,importe);
  26.         if (!HashPartes.containsKey(parte.getMatricula())){
  27.             ArrayList<Partes> ArrPartes = new ArrayList<Partes>();
  28.             HashPartes.put(parte.getMatricula(), ArrPartes);
  29.             HashPartes.get(parte.getMatricula()).add(parte);
  30.             } else
  31.             HashPartes.get(parte.getMatricula()).add(parte);
  32.     }
  33.  
  34.     private Matricula anadirMatricula() {
  35.         String provincia="";
  36.         int numero=0;
  37.         String letra="";
  38.        
  39.         System.out.println("Introduce la letra asociada a la provincia");
  40.         provincia = Lector.leerString();
  41.         System.out.println("Introduce el número de la matrícula");
  42.         numero = Lector.leerInt();
  43.         System.out.println("Introduce las letras del final de la matrícula");
  44.         letra=Lector.leerString();
  45.        
  46.         Matricula m = new Matricula(provincia,numero,letra);
  47.         return m;
  48.     }
  49.    
  50.     public void listar(){
  51.         //Primero comprobamos que el HashMap no está vacío.
  52.         System.out.println("LISTADO COMPLETO DE PARTES \n ========");
  53.         if(HashPartes.size()!= 0){
  54.            
  55.             //Recorremos las claves por matrícula
  56.             Set<Matricula> keysmatri = HashPartes.keySet();
  57.             Iterator<Matricula> itMatri = keysmatri.iterator();
  58.            
  59.             while (itMatri.hasNext()){
  60.                 itMatri.hasNext();
  61.                 Matricula m = itMatri.next();
  62.                
  63.                 //Y por cada matrícula, recorremos el array de partes
  64.                 ArrayList<Partes> ArrPartes = HashPartes.get(m);
  65.                 Iterator<Partes> itPart = ArrPartes.iterator();
  66.                
  67.                 while(itPart.hasNext()){
  68.                     Partes p = itPart.next();
  69.                     System.out.println("========");
  70.                     System.out.println("Matricula: " + p.getMatricula().getProvincia() +"-"+ p.getMatricula().getNumero()+"-"+p.getMatricula().getLetra() + "\n" +
  71.                                        "Codigo: " + p.getCodigo() + "\n" +
  72.                                        "Descripción: " + p.getDescripcion() + "\n" +
  73.                                        "Importe: " + p.getImporte() + "\n");
  74.                 }
  75.             }  
  76.         }else{
  77.                 System.out.println("No hay partes para esta matrícula o la matrícula no existe.");
  78.         }
  79.     }
  80.    
  81.     public void mostrar(){
  82.         Matricula m = anadirMatricula();
  83.  
  84.         if(HashPartes.containsKey(m)){
  85.             ArrayList<Partes> ArrPartes = HashPartes.get(m);
  86.             Iterator<Partes> itPart = ArrPartes.iterator();
  87.            
  88.             while (itPart.hasNext()){
  89.                 Partes p = itPart.next();
  90.                 System.out.println("========");
  91.                 System.out.println("Matricula: " + p.getMatricula().getProvincia() +"-"+ p.getMatricula().getNumero()+"-"+p.getMatricula().getLetra() + "\n" +
  92.                                    "Codigo: " + p.getCodigo() + "\n" +
  93.                                    "Descripción: " + p.getDescripcion() + "\n" +
  94.                                    "Importe: " + p.getImporte() + "\n");
  95.             }
  96.         } else
  97.             System.out.println("Objeto no localizado");
  98.     }
  99.    
  100.     public void eliminar(){
  101.        
  102.     }
  103. }

Muchas gracias!
__________________
Adrian Tornero Ortiz
Técnico Superior en Desarrollo de Aplicaciones Informáticas
https://www.linkedin.com/in/adriantornero
  #2 (permalink)  
Antiguo 07/04/2013, 09:38
Avatar de Atorort  
Fecha de Ingreso: abril-2010
Ubicación: Valencia
Mensajes: 127
Antigüedad: 14 años
Puntos: 0
Respuesta: Acceder a Key del HashMap

Perdón por el doble post, os dejo el código de las clases Matrícula y Partes.
En la clase del main, simplemente llamo a los métodos de la clase Gestión(anadir, listar,mostrar,eliminar).

CLASE MATRICULA:
Código Java:
Ver original
  1. public class Matricula {
  2.  
  3.     private String provincia;
  4.     private int numero;
  5.     private String letra;
  6.    
  7.     public Matricula(){
  8.         setProvincia("");
  9.         setNumero(0);
  10.         setLetra("");
  11.                
  12.     }
  13.    
  14.     public Matricula(String param1, int param2, String param3){
  15.         setProvincia(param1);
  16.         setNumero(param2);
  17.         setLetra(param3);
  18.     }
  19.  
  20.    
  21.     public String getProvincia() {
  22.         return provincia;
  23.     }
  24.  
  25.     public void setProvincia(String provincia) {
  26.         this.provincia = provincia;
  27.     }
  28.  
  29.     public int getNumero() {
  30.         return numero;
  31.     }
  32.  
  33.     public void setNumero(int numero) {
  34.         this.numero = numero;
  35.     }
  36.  
  37.     public String getLetra() {
  38.         return letra;
  39.     }
  40.  
  41.     public void setLetra(String letra) {
  42.         this.letra = letra;
  43.     }
  44.    
  45.     @Override public boolean equals(Object matricula)
  46.     {
  47.         //Comprobamos que matrícula no es nulo
  48.         if (matricula == null)
  49.             return false;
  50.         //Comprobamos que el objeto hace referencia al mismo objeto
  51.         if (matricula == this)
  52.             return true;
  53.         //Comprobamos que matricula es una Matricula
  54.         if (!(matricula instanceof Matricula))
  55.             return false;
  56.         Matricula m = (Matricula) matricula;
  57.         //Comprobamos que cada variable contenga lo que pertenece.
  58.         if (this.provincia != m.provincia)
  59.             return false;
  60.         if (this.numero != m.numero)
  61.             return false;
  62.         if (this.letra != m.letra)
  63.             return false;
  64.         return true;
  65.     }
  66. /*      boolean ok = true;
  67.         if ( !this.letra.equals(matricula.getLetra()) || !this.numero.equals(matricula.getNumero()) || !this.provincia.equals(matricula.getProvincia()))
  68.             ok = false;
  69.         return ok;
  70. */
  71.     @Override public int hashCode(){
  72.         //Sobreescribimos a raiz del 1
  73.         StringBuffer buffer = new StringBuffer();
  74.        
  75.         buffer.append(this.provincia);
  76.         buffer.append((Integer.toString(this.numero)));
  77.         buffer.append(this.letra);
  78.        
  79.         return buffer.toString().hashCode();
  80.     }
  81. }

CLASE PARTES:

Código Java:
Ver original
  1. public class Partes {
  2.     private Matricula matricula;
  3.     private int codigo;
  4.     private String descripcion;
  5.     private double importe;
  6.    
  7.     public Partes(){
  8.         setMatricula(null);
  9.         codigo = 0;
  10.         descripcion = "";
  11.         importe = 0.0;
  12.     }
  13.    
  14.     public Partes (Matricula m, int param2, String param3, double param4){
  15.         setMatricula(m);
  16.         codigo = param2;
  17.         descripcion = param3;
  18.         importe = param4;
  19.        
  20.     }
  21.  
  22.  
  23.     public int getCodigo() {
  24.         return codigo;
  25.     }
  26.  
  27.  
  28.     public void setCodigo(int codigo) {
  29.         this.codigo = codigo;
  30.     }
  31.  
  32.  
  33.     public String getDescripcion() {
  34.         return descripcion;
  35.     }
  36.  
  37.  
  38.     public void setDescripcion(String descripcion) {
  39.         this.descripcion = descripcion;
  40.     }
  41.  
  42.  
  43.     public double getImporte() {
  44.         return importe;
  45.     }
  46.  
  47.  
  48.     public void setImporte(double importe) {
  49.         this.importe = importe;
  50.     }
  51.  
  52.     public Matricula getMatricula() {
  53.         return matricula;
  54.     }
  55.  
  56.     public void setMatricula(Matricula matricula) {
  57.         this.matricula = matricula;
  58.     }
  59.    
  60. }
__________________
Adrian Tornero Ortiz
Técnico Superior en Desarrollo de Aplicaciones Informáticas
https://www.linkedin.com/in/adriantornero
  #3 (permalink)  
Antiguo 08/04/2013, 11:18
Avatar de Atorort  
Fecha de Ingreso: abril-2010
Ubicación: Valencia
Mensajes: 127
Antigüedad: 14 años
Puntos: 0
Respuesta: Acceder a Key del HashMap

Gracias a todos por las respuestas.... al final la solución la tengo aquí:

Código Java:
Ver original
  1. Iterator it = HashPartes.entrySet().iterator();
  2.         Boolean exist = false;
  3.         while (it.hasNext()){
  4.             Map.Entry<Matricula, ArrayList> mapentry = (Map.Entry<Matricula, ArrayList>) it.next();
  5.             if (mapentry.getKey().equals(m)){
  6.                 exist = true;
  7.             }
  8.         }
__________________
Adrian Tornero Ortiz
Técnico Superior en Desarrollo de Aplicaciones Informáticas
https://www.linkedin.com/in/adriantornero

Etiquetas: clase, hashmap, key, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:27.