elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Comparar lista de objetos sin importar orden
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Comparar lista de objetos sin importar orden  (Leído 1,510 veces)
ivan_esp

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Comparar lista de objetos sin importar orden
« en: 9 Octubre 2014, 12:18 pm »

Hola,
Estoy haciendo ejercicios de java y me he encontrado con uno que no logro resolver,a ver si me podeis echar una mano.

Resulta que tengo varias clases: Circulo,Triangulo,GrupoFiguras y UsoDeGrupoFiguras

Código
  1. public class Triangulo{
  2. private double x,y;
  3. private double base,altura;
  4.  
  5.  
  6. public boolean equals (Object c){
  7.    if(c instanceof Triangulo){
  8.        Triangulo tri=(Triangulo) c;
  9.        if(this.x==((Triangulo)c).x && this.y==((Triangulo)c).y && this.base==((Triangulo)c).base && this.altura==((Triangulo)c).altura)
  10.        return true;
  11.    }
  12.  
  13.    return false;
  14. }
  15.  
  16. //triangulo.equals(triangulo2)
  17.  
  18. Triangulo(double cx,double cy,double b, double a)
  19. {x= cx; y = cy; base = b; altura = a;}
  20.  
  21. public String toString()
  22. {return "Triangulo:\n\t"+"Posicion: ("+x+","+y+")\n\tBase: "+base+"\n\tAltura: "+altura;}}

Código
  1. public class Circulo{
  2. private double x,y;
  3. private double r;
  4.  
  5.  
  6. Circulo(double a, double b,double c)
  7. {x=a; y=b; r=c;}
  8.  
  9. public boolean equals (Object c){
  10.    if(c instanceof Circulo){
  11.        Circulo cir=(Circulo) c;
  12.        if(this.r==((Circulo)c).r && this.x==((Circulo)c).x && this.y==((Circulo)c).y) return true;
  13.    }
  14.  
  15.    return false;
  16. }
  17.  
  18.  
  19. public String toString ()
  20. {return "Circulo:\n\t"+
  21. "Posicion: ("+x+","+y+
  22. ")\n\tRadio: "+r+"\n";}}


En este el metodo equals esta mal,lo estoy probando

Código
  1. public class GrupoFiguras{
  2.  
  3. static final int MAX_NUM_FIGURAS = 10;
  4. private Object [] listaFiguras = new Object [MAX_NUM_FIGURAS];
  5. private int numF=0;
  6. public void anyadeFigura(Object o){
  7. listaFiguras[numF++]= o;
  8.  
  9. }
  10. public void anyadeCirculo(Circulo c) {listaFiguras[numF++]= c;}
  11. public void anyadeTriangulo(Triangulo t) {listaFiguras[numF++]= t;}
  12.  
  13. public boolean equals (Object c){
  14.  //  GrupoFiguras lis=(GrupoFiguras) c;
  15.    boolean igual=false;
  16.  
  17.   for(int i=0;i<this.numF;i++){
  18.   for(int j=0;j<((GrupoFiguras)c).numF;j++){
  19.  
  20.       if(this.listaFiguras[i].equals(((GrupoFiguras)c).listaFiguras[j])){igual=true;}
  21.       else{igual=false;}
  22.    }}
  23.  
  24.   for(int i=0;i<((GrupoFiguras)c).numF;i++){
  25.   for(int j=0;j<this.numF;j++){
  26.       if(((GrupoFiguras)c).listaFiguras[i].equals(this.listaFiguras[j])){igual=true;}
  27.       else{igual=false;}
  28.    }}
  29.  
  30.  
  31.    if(igual==true) return true;
  32.  
  33.  
  34.    return false;
  35.  
  36.  
  37. }
  38. public String toString(){
  39. String s= "Circulos:";
  40.  
  41. for(int i = 0;i < numF; i++)
  42. if (listaFiguras[i] instanceof Circulo) s+="\n"+listaFiguras[i];
  43. s+= "\nTriangulos:";
  44.  
  45. for(int i = 0;i < numF; i++)
  46. if (listaFiguras[i] instanceof Triangulo)s+="\n"+listaFiguras[i];
  47. return s;}}
  48.  
  49.  
  50.  

Código
  1. public class UsoDeGrupoFiguras{
  2.  
  3. public static void main (String args[]){
  4.  
  5. GrupoFiguras g = new GrupoFiguras();
  6. g.anyadeCirculo(new Circulo(10,5,3.5));
  7. g.anyadeTriangulo(new Triangulo(10,5,6.5,32));
  8. g.anyadeTriangulo(new Triangulo(10,5,6.5,32));
  9.  
  10. GrupoFiguras g2 = new GrupoFiguras();
  11. g2.anyadeCirculo(new Circulo(10,5,3.6));
  12. g2.anyadeTriangulo(new Triangulo(10,5,6.5,32));
  13. g2.anyadeTriangulo(new Triangulo(10,5,6.5,32));
  14.  
  15. System.out.println(g.equals(g2));
  16.  
  17.  
  18. Triangulo tri=new Triangulo(10,5,7.5,32);
  19. Triangulo tri2=new Triangulo(10,5,6.5,32);
  20.  
  21. //System.out.println(tri.equals(tri2));
  22.  
  23.  
  24. Circulo cir=new Circulo(10,5,3.5);
  25. Circulo cir2=new Circulo(10,5,3.5);
  26.  
  27. //System.out.println(cir.equals(cir2));
  28.  
  29. //System.out.println(g);
  30. }
  31. }

Los equals de los triangulos y circulos me funcionan bien,pero a la hora de comparar los grupos de figuras me falla.
Esto es lo que deberia hacer :
Sobrescribe el metodo equals(Object) para las clases Circulo ,Triangulo y GrupoFiguras .       Para ello supondremos que dos figuras son
iguales si contienen exactamente los mismos valores en sus atributos, y
que dos grupos de figuras son iguales si contienen las mismas figuras sin
importar el orden ni la cantidad de veces que aparezcan. Prueba los metodos equals(Object) en UsoDeGrupoFiguras comparando objetos entre si.
Que ocurre si comparas figuras de tipos diferentes? Considera los cambios
que realizarias en los metodos anyadeCirculo, anyadeTriangulo y equals de la clase GrupoFiguras si los grupos de guras fueran conjuntos, es decir, sin elementos repetidos


El problema es que no se como comparar los grupos de figuras ya que como pueden estar en distinto orden compararia un triangulo con un circulo y al reves.

Lo que necesito esque solo compare triangulos con triangulos y circulos con circulos y que sean iguales.

Saludos y gracias


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Duda lista de de datos y objetos « 1 2 »
Java
Dem0ny 11 6,484 Último mensaje 13 Marzo 2009, 18:05 pm
por sapito169
Orden Necesito Orden
Foro Libre
cyriusa 3 3,280 Último mensaje 11 Febrero 2011, 14:08 pm
por [u]nsigned
Microsoft: comparar IE9 y Firefox 4 es como comparar “manzanas y naranjas” « 1 2 »
Noticias
wolfbcn 15 7,259 Último mensaje 27 Marzo 2011, 04:35 am
por Foxy Rider
Cargar Lista de un fichero con fseek a una lista auxiliar en el programa.
Programación C/C++
samur88 1 3,122 Último mensaje 12 Mayo 2011, 23:25 pm
por samur88
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines