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

Comparar lista de objetos sin importar el orden

Estas en el tema de Comparar lista de objetos sin importar el orden en el foro de Java en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 09/10/2014, 04:11
 
Fecha de Ingreso: diciembre-2012
Mensajes: 26
Antigüedad: 11 años, 4 meses
Puntos: 0
Comparar lista de objetos sin importar el orden

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 Java:
Ver original
  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 Java:
Ver original
  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 Java:
Ver original
  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;}}

Código Java:
Ver original
  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

Etiquetas: clase, lista, objetos, orden, string, valor
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 15:51.