Foros aprenderaprogramar.com

Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: fedegaray en 02 de Mayo 2015, 22:57

Título: Cómo sobreescribir métodos toString y equals en Java Ejercicio resuelto CU00694B
Publicado por: fedegaray en 02 de Mayo 2015, 22:57
Hola otra vez. Casi llegando al final del curso, vine a mostrar mi resolución de la entrega 94.

Citar
EJERCICIO

Define una clase Figura de la que hereden otras dos clases denominadas Cuadrado y Círculo. La clase figura debe tener al menos el campo dimensionPrincipal. Las clases Cuadrado y Círculo deben tener al menos un método calcularArea que permita calcular el área a partir de la dimensión principal, utilizando la fórmula matemática correspondiente. Además, sobreescribe el método equals para que dos cuadrados sean iguales si tienen igual dimensión principal, y dos círculos idem. A continuación crea un programa test donde crees varios círculos y cuadrados y hagas comprobaciones de igualdad usando el método equals.

Clase Figura
Código: [Seleccionar]
public class Figura {
    protected double PI = 3.1416;
    protected double dimensionPrincipal;

    public Figura () {
        dimensionPrincipal = 0.0d;
    }

    public Figura (double dimensionPrincipal) {
        this.dimensionPrincipal = dimensionPrincipal;
    }

    public void setDimensionPrincipal (double dimensionPrincipal) {
        this.dimensionPrincipal = dimensionPrincipal;
    }

    public double getDimensionPrincipal () {
        return dimensionPrincipal;
    }

    public boolean equals (Object obj) {
        if (obj instanceof Figura) {
            Figura tmpFigura = (Figura) obj;
            if (this.dimensionPrincipal==tmpFigura.dimensionPrincipal) {
                return true;
            } else {
                return false;
            }
        } else {
            return false;
        }
    }
}

Clase Cuadrado
Código: [Seleccionar]
public class Cuadrado extends Figura {
   
    public Cuadrado () {
        super();
    }
   
    public Cuadrado (double dimensionPrincipal) {
        super (dimensionPrincipal);
    }
   
    public void setDimensionPrincipal (double dimensiónPrincipal) {
        super.setDimensionPrincipal(dimensiónPrincipal);
    }
    public double getDimensiónPrincipal () {
        return super.getDimensionPrincipal();
    }
   
    public double calcularArea () {
        return dimensionPrincipal * dimensionPrincipal;
    }
   
    public boolean equals (Object obj) {
        if (obj instanceof Cuadrado) {
            Cuadrado tmpCuadrado = (Cuadrado) obj;
             if (super.equals(tmpCuadrado)) {
                return true;
            } else {
                return false;
            }
        } else {
            return false;
        }
    }
}

Clase Circulo
Código: [Seleccionar]
public class Circulo extends Figura {
   
    public Circulo () {
        super();
    }
   
    public Circulo (double dimensionPrincipal) {
        super (dimensionPrincipal);
    }
   
    public double calcularArea () {
        return (( dimensionPrincipal / 2 ) * ( dimensionPrincipal / 2 )) * PI ;
    }
   
    public void setDimensionPrincipal (double dimensiónPrincipal) {
        super.setDimensionPrincipal(dimensiónPrincipal);
    }
    public double getDimensiónPrincipal () {
        return super.getDimensionPrincipal();
    }
   
    public boolean equals (Object obj) {
        if (obj instanceof Circulo) {
            Circulo tmpCirculo = (Circulo) obj;
             if (super.equals(tmpCirculo)) {
                return true;
            } else {
                return false;
            }
        } else {
            return false;
        }
    }
}

Clase TestFigura
Código: [Seleccionar]
public class TestFigura {
    public static void main (String [] args) {
        Cuadrado cuad1 = new Cuadrado (52);
        Cuadrado cuad2 = new Cuadrado (31);
        Cuadrado cuad3 = new Cuadrado (52);
        Circulo circ1 = new Circulo (33);
        Circulo circ2 = new Circulo (33);
        Circulo circ3 = new Circulo (52);
        System.out.println ("cuad1 es igual a cuad2: " + cuad1.equals(cuad2));
        System.out.println ("cuad1 es igual a cuad3: " + cuad1.equals(cuad3));
        System.out.println ("cuad1 es igual a circ1: " + cuad1.equals(circ1));
        System.out.println ("cuad1 es igual a circ2: " + cuad1.equals(circ2));
        System.out.println ("cuad1 es igual a circ3: " + cuad1.equals(circ3));
        System.out.println ("cuad2 es igual a cuad3: " + cuad2.equals(cuad3));
        System.out.println ("cuad2 es igual a circ1: " + cuad2.equals(circ1));
        System.out.println ("cuad2 es igual a circ2: " + cuad2.equals(circ2));
        System.out.println ("cuad2 es igual a circ3: " + cuad2.equals(circ3));
        System.out.println ("cuad3 es igual a circ1: " + cuad3.equals(circ1));
        System.out.println ("cuad3 es igual a circ2: " + cuad3.equals(circ2));
        System.out.println ("cuad3 es igual a circ3: " + cuad3.equals(circ3));
        System.out.println ("circ1 es igual a circ2: " + circ1.equals(circ2));
        System.out.println ("circ1 es igual a circ3: " + circ1.equals(circ3));
        System.out.println ("circ2 es igual a circ3: " + circ2.equals(circ3));
    }
}

Título: Re:Ejercicio CU00694B - Sobreescribir métodos toString y equals en Java
Publicado por: Dan_SB en 03 de Mayo 2015, 00:12
Hola fede

Has escrito bien tus clases, solo tengo dos comentarios:

El primero es que en tus metodos para calcular el area y demas, podias haber usado el pow de la clase Math como pudiste ver en el curso:

Citar
public double getAreaCirculo(){return (PI * Math.pow(dimensionPrincipal, 2));}

Y el segundo comentario, referente a tu testFigura, quiero que eches un vistazo a esto:

(http://i.imgur.com/Jl5OnYl.png)

estas lineas amarillas quieren decir que los objetos que estas comparando son incompatibles... esto tiene que ver con esta parte del codigo:

Citar
Cuadrado cuad1 = new Cuadrado (52);
        Cuadrado cuad2 = new Cuadrado (31);
        Cuadrado cuad3 = new Cuadrado (52);
        Circulo circ1 = new Circulo (33);
        Circulo circ2 = new Circulo (33);
        Circulo circ3 = new Circulo (52);

Lo correcto era hacer uso del polimorfismo, al hacer esto, estos warnings o quejas de incompatibilidad de tipos desaparecen:
Citar
        Figura cuad1 = new Cuadrado (52);
        Figura cuad2 = new Cuadrado (31);
        Figura cuad3 = new Cuadrado (52);
        Figura circ1 = new Circulo (33);
        Figura circ2 = new Circulo (33);
        Figura circ3 = new Circulo (52);

El otro detalle, tambien podias agregar todos esos objetos en un arraylist y recorrerlos, pero esta bien todo°

Saludos!
Título: Re:Ejercicio CU00694B - Sobreescribir métodos toString y equals en Java
Publicado por: fedegaray en 03 de Mayo 2015, 02:00
Gracias por las observaciones. Todas son muy válidas y me ayudan a mejorar mi capacidad de codificar. Muchas gracias.
Quiero hacerte una pregunta, porqué a ti te aparecen esas lineas amarillas? en mi BlueJ no aparecen. Será que tengo una versión anticuada quizás?
Título: Re:Ejercicio CU00694B - Sobreescribir métodos toString y equals en Java
Publicado por: Dan_SB en 03 de Mayo 2015, 02:11
Lo que sucede es que uso otro IDE, se llama netbeans, es un poco mas robusto para usar para la gente nueva, pero no te preocupes, es casi la misma cosa que blueJ!  :)