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

Dudas de un trabajo

Estas en el tema de Dudas de un trabajo en el foro de Java en Foros del Web. Hola a la comunidad. Estoy haciendo un trabajo de la facultad en el que uso Eclipse Juno y me han surgido dudas que a lo ...
  #1 (permalink)  
Antiguo 02/08/2014, 13:42
 
Fecha de Ingreso: agosto-2014
Mensajes: 4
Antigüedad: 9 años, 8 meses
Puntos: 0
Pregunta Dudas de un trabajo

Hola a la comunidad. Estoy haciendo un trabajo de la facultad en el que uso Eclipse Juno y me han surgido dudas que a lo mejor me podrían resolver aquí.

La primera tiene que ver con el siguiente método en el que quiero saber si un objeto está en un conjunto o no, y para ello uso el contains:

Código Java:
Ver original
  1. public static Boolean estaApp(App app, Set<App> sApp){
  2.   Boolean res = false;
  3.   if(sApp.contains(app)){
  4.     res = true;
  5.   }
  6.   return res;
  7. }

"App" es un tipo que creé anteriormente.

El caso es que metí los tres primeros de los cuatro objetos que se ven a continuación:

Código Java:
Ver original
  1. App app1 = new AppImpl(TipoSO.WINDOWS, "Buscador de buenos nombres", ...);
  2. App app2 = new AppImpl(TipoSO.ANDROID, "Buscador", ...);
  3. App app3 = new AppImpl(TipoSO.IOS, "Otraplicacion", ...);
  4. App app4 = new AppImpl(TipoSO.IOS, "Otraplicacion", ...);

En un conjunto que creé después:

Código Java:
Ver original
  1. Set<App> conjApp = new HashSet<App>();
  2.        
  3. conjApp.add(app1);
  4. conjApp.add(app2);
  5. conjApp.add(app3);

Y ya por último hice que se mostraran dos resultados por pantalla:

Código Java:
Ver original
  1. System.out.println(estaApp(app3, conjApp));
  2. System.out.println(estaApp(app4, conjApp));

Tanto "app3" y "app4" tienen los mismos parámetros, por lo que me esperaba que por pantalla se viera:

true
true

Indicándome que ambos objetos están en el conjunto, ya que ambos son el mismo. Pero no fue así, el segundo resultado es un "false".

¿En qué me he equivocado?, ¿he usado mal el contains?
  #2 (permalink)  
Antiguo 02/08/2014, 20:07
Avatar de Dafonz  
Fecha de Ingreso: octubre-2009
Mensajes: 127
Antigüedad: 14 años, 6 meses
Puntos: 36
Respuesta: Dudas de un trabajo

Que tal,

No se si implementaste el equals de la clase App, ya que según la documentación de la interface Set el containts se evalua con equals (en caso de que no sea null), por lo que aunque tengan los mismos parámetros no son el mismo objetos y sin sobreescribir el equals compara las instancias tal cual.

JavaDoc Set

Saludos,
  #3 (permalink)  
Antiguo 05/08/2014, 14:12
 
Fecha de Ingreso: agosto-2014
Mensajes: 4
Antigüedad: 9 años, 8 meses
Puntos: 0
Respuesta: Dudas de un trabajo

Gracias por responder y perdón por la tardanza.

He conseguido solucionar los problemas que tenía referente al contains.

Ahora tengo problemas relacionados con el equals y el "==". Quería hacer un método con el que pudiera saber si en una lista existía algún objeto igual que cualquier otro objeto que quisiera comparar, tal que así:

Código Java:
Ver original
  1. public static Boolean hayAppIgual(List<App> l, App a){
  2.         Boolean control = false;
  3.         for(int i = 0; i < l.size(); i++){
  4.             if(a.equals(l.get(i))){
  5.                 control = true;
  6.                 break;
  7.             }
  8.         }
  9.         return control;
  10.     }

El equals que uso debería seguir el siguiente método:

Código Java:
Ver original
  1. public boolean equeals(Object o){
  2.        
  3.         boolean control = false;
  4.         if(o instanceof App){
  5.             control = so.equals(((App) o).getSO());
  6.             if(control == true){
  7.                 control = nombre.equals(((App) o).getNombre());
  8.                 if(control == true){
  9.                     control = desa.equals(((App) o).getDesarrollador());
  10.                 }else{
  11.                     throw new IllegalArgumentException("Las dos aplicaciones no comparten nombre...");
  12.                 }
  13.             }else{
  14.                 throw new IllegalArgumentException("Las dos aplicaciones no comparten sistema operativo...");
  15.             }
  16.         }else{
  17.             throw new IllegalArgumentException("Las dos aplicaciones no son iguales...");
  18.         }
  19.         return control;
  20.     }

Pero me da como resultado "false", aunque evidentemente le pase una lista en la que hay un objeto igual, según los criterios que uso, que el objeto que quiero comparar.

No sé en qué o dónde fallo, así que lo agradecería si alguien pudiera ayudarme.
  #4 (permalink)  
Antiguo 06/08/2014, 03:34
Avatar de rgf1987  
Fecha de Ingreso: diciembre-2012
Ubicación: Asturias
Mensajes: 269
Antigüedad: 11 años, 4 meses
Puntos: 22
Respuesta: Dudas de un trabajo

Hola,

en primer lugar. no se si es un fallo al copiar el código o no, pero al método lo has llamado

Código Java:
Ver original
  1. public boolean equeals(Object o){

así que la llamada continua haciéndose al método equals de la clase Object.
  #5 (permalink)  
Antiguo 06/08/2014, 04:44
 
Fecha de Ingreso: agosto-2014
Mensajes: 4
Antigüedad: 9 años, 8 meses
Puntos: 0
Respuesta: Dudas de un trabajo

Muchas gracias por resaltar ese pequeño fallo. Resulta que el método "equals" que quería usar para el método de utilidad lo había llamado "equeals". Ha sido un simple error de haber escrito mal el nombre. Ahora funciona correctamente.

Mi siguiente problema ahora está relacionado con "==". Lo he usado para saber si en una lista existe un objeto idéntico al que quiero comparar, y he terminado haciendo este método:

Código Java:
Ver original
  1. public static Boolean hayAppIdentica(List<App> l, App a){
  2.   Boolean control =  false;
  3.   for(int i = 0, i < l.size(); i++){
  4.     if(a == l.get(i)){
  5.       control = true;
  6.       break;
  7.     }
  8.   }
  9.   return control;
  10. }

Y a pesar de haber pasado un objeto para comparar que sí tiene otro objeto idéntico dentro de la lista me responde con un "false".

Nota: He entendido que dos objetos de una misma clase son idénticos cuando todos sus parámetros coinciden.
  #6 (permalink)  
Antiguo 06/08/2014, 06:00
Avatar de rgf1987  
Fecha de Ingreso: diciembre-2012
Ubicación: Asturias
Mensajes: 269
Antigüedad: 11 años, 4 meses
Puntos: 22
Respuesta: Dudas de un trabajo

Hay que tener en cuenta que no es lo mismo hacer == que equals.

con == comparas las referencias de los objetos.

http://www.aprenderaprogramar.es/ind...ero&Itemid=188

Etiquetas: dudas, objeto, trabajo
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 06:34.