style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

Ayuda con Ejercicio de herencia y Polimorfismo

Buenas es mi primera vez posteando algo aquí,
espero que puedan ayudarme, de antemano gracias

la duda está en la parte que dice: "un método distancia que recibe por parámetro un objeto Punto y regresa un double con la distancia entre los dos puntos, ésta distancia se calcula con la fórmula matemática de la distancia entre dos puntos que es la raíz cuadrada de la suma de los cuadrados de x y y"

publico todo el ejercicio .

Ejercicio Herencia, Polimorfismo y Reutilización 1

Escriba una clase Punto que tiene dos atributos de tipo double, para representar x y y, respectivamente. Un constructor que recibe ambos valores por parámetro para inicializar los atributos; un constructor sin parámetros que llama al constructor con parámetros con los valores 0,0. Un método set para cada uno de los atributos, un método get para cada uno de los atributos; además un método distancia que recibe por parámetro un objeto Punto y regresa un double con la distancia entre los dos puntos, ésta distancia se calcula con la fórmula matemática de la distancia entre dos puntos que es la raíz cuadrada de la suma de los cuadrados de x y y. Incluir un método toString para mostrar el punto con el formato (0,0).

Utilizando la clase Punto escriba una clase Polígono. Esta clase tiene como atributo un arreglo de objetos Punto. Se consideran adyacentes los objetos Punto que estén en celdas consecutivas del array y los puntos que están en la primera y última celda. Esta clase ha de tener los siguientes métodos:

a) El constructor, recibirá por parámetro un arreglo con los objetos Punto que definen el Polígono. Hay que controlar que el número de vértices del Polígono no es menor que 3. En caso contrario lanzar una excepción de tipo IllegalArgumentException.
b) Trasladar(), recibe por parámetro el desplazamiento en la coordenada x y el
desplazamiento en la coordenada y. Se debe recorrer el arreglo desplazando cada uno de los puntos.
c) Escalar(), recibe por parámetro el factor de escala para la coordenada x y el factor de escala para la coordenada y. Se debe recorrer el arreglo multiplicando su coordenada x por el factor x y su coordenada y por el factor y.
d) numVértices(), devuelve el número de vértices del Poligono. El número de vértices coincide con la longitud del array.
e) toString() devuelve la información de los puntos del Polígono, uno en cada línea. Debe llamar al método toString() de cada uno de los puntos y los concatena en un String auxiliar que se devuelve al terminar el método.
f) Perímetro(), devuelve el perímetro del polígono. Se calcula utilizando el método distancia() de la clase Punto. Se calcula y suma la distancia de cada Punto con su Punto siguiente, sin olvidar la distancia entre el Punto de la última celda del arreglo con el Punto en la celda 0 del arreglo.

Escriba una aplicación en la que:

a) Cree un Polígono de cuatro vértices, que serán (0,0), (2,0), (2,2) y (0,2). Crear el arreglo y rellenarlo con los cuatro puntos, luego crear el objeto Polígono.

1
POO Ejercicio Herencia, Polimorfismo y Reutilización 1

b) Muestre la información del polígono y su perímetro en pantalla. Utilizar el método toString().
c) Traslade el polígono 4 en el eje x, traslade el polígono -3 en el eje y.
d) Muestre la información del polígono y su perímetro en pantalla. Utilizar el método toString().
e) Escale el polígono por 3 en el eje x y por 0.5 en el eje y.
f) Muestre la información del polígono y su perímetro por pantalla. Utilizar el método toString().

Escriba una clase PoligonoColoreado que herede de la clase Poligono anterior. En esta clase se debe añadir un atributo color (de la clase Color del paquete java.awt), se deben agregar métodos para cambiar y obtener el color. El método toString() se tiene que modificar para que devuelva el color del Poligono, además de los vértices que lo componen. El constructor de esta clase recibe el arreglo de puntos y el color del polígono, se debe llamar al constructor de la superclase pasándole dicho arreglo e inicializar el atributo color.

Escriba una aplicación en la que:

a) Cree un PoligonoColoreado de cuatro vértices que serán (0,0), (2,0), (2,2), (0,2) y de color rojo.
b) Muestre la información del polígono y su perímetro en pantalla. c) Traslade el polígono 4 en el eje x y -3 en el eje y.
d) Cambie el color del PoligonoColoreado a azul.
e) Muestre la información del polígono por pantalla.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

¿Y cual es la duda? "un

¿Y cual es la duda?

"un método distancia que recibe por parámetro un objeto Punto y regresa un double con la distancia entre los dos puntos, ésta distancia se calcula con la fórmula matemática de la distancia entre dos puntos que es la raíz cuadrada de la suma de los cuadrados de x y y" =

public class Punto {
     .... etc.etc.
    public double distancia( Punto a ) {
       return // raiz cuadrada de blablabla
    }
    ... etc. etc
}

Y luego la usas:

Punto a = .... // crear el punto a
Punto b = ... // crear el punto b
double distancia = a.distancia(b);

La duda es lo que llevaria el

La duda es lo que llevaria el cuerpo del metodo, la formula la se, pero como sería en este caso?
y como se usaria para esto:
Perímetro(), devuelve el perímetro del polígono. Se calcula utilizando el método distancia() de la clase Punto. Se calcula y suma la distancia de cada Punto con su Punto siguiente, sin olvidar la distancia entre el Punto de la última celda del arreglo con el Punto en la celda 0 del arreglo.

"La duda es lo que llevaria

"La duda es lo que llevaria el cuerpo del metodo, la formula la se, pero como sería en este caso?"
Puees una ahí mismo lo dice: la raíz cuadrada ( Math.sqrt ) de la suma ( + ) de los cuadrados de x ( x*x ) y de y (y*y)

return Math.sqrt( x*x + y*y );

"y como se usaria para esto:"

¬¬

Pues creas otro método llamado perimetro(), y utilizas el método distancia como está mostrado arriba, sumando ( recueda con el operador + ) cada punto y sin olvidar... bueno ahí mismo lo dice.

Por que no mejor nos muestras lo que llevas ( que puede ser nada ) o lo que haz intentado (algo habrás intentado) y nos preguntas específicamente la duda que tienes. De otra forma no sé si no entiendes lo que está escrito, si no sabes aritmética básica o si estás queriendo escribir tu propio método para sacar raíces cuadradas ( que no es trivial por cierto )

Yo te ayudo acá, pero dime en que? También está la opción de que quieras todo el programa, quizá alguien del foro te lo haga, ya lo han hecho antes. En fin sea lo que sea es más fácil cuando eres claro en lo que quieres, sino pues nos pones a adivinar.

public class Punto{   

public class Punto
{

    double x;
    double y;
   
    public Punto(double x,double y){
        this.x=x;
        this.y=y;

    }  

    public Punto(){
        x=0;
        y=0;

    }

    public void setX(double x){
        this.x=x;

    }

    public void setY(double y){
        this.y=y;

    }

    public double getX(){
        return x;

    }

    public double getY(){
        return y;

    }

    public double distancia(Punto objetoPunto){

        return
        Math.sqrt ((Math.pow (x - objetoPunto.getX(),2)) + ((Math.pow(y - objetoPunto.getY(),2)))) ;

    }
    public String toString(){
        return
        "(" + x + "," + y + ")";

    }
}

public class Poligono
{
    // instance variables - replace the example below with your own

    Punto[] puntos;
    /**
     * Constructor for objects of class Poligono
     */

    public Poligono(Punto[] punto)throws IllegalArgumentException
    {
        if (puntos.length<3)
        {
            throw new IllegalArgumentException ("No es un polígono");
        }
        else
        {
            Poligono poligono=new Poligono(puntos);
        }
    }
   
   

 
    /**
     */

    public void trasladar(int desX,int desY)
    {
        // put your code here
        for (int indice=0;indice< puntos.length;indice++){
            puntos[indice].setX(puntos[indice].getX()+ desX);
            puntos[indice].setY(puntos[indice].getY()+ desY);
        }
    }

    public void escalar(int escX,int escY)
    {
        // put your code here
        for (int indice=0;indice<puntos.length;indice++){
            puntos[indice].setX(puntos[indice].getX()* escX);
            puntos[indice].setY(puntos[indice].getY()* escY);
        }
    }

    public int numVertices(){
        return
        puntos.length;
    }

    public String toString(){
        String mensaje="";
        for(int i=0;i<puntos.length;i++){
            mensaje += puntos[i].toString()+ "   ";

        }

        return
        mensaje;

    }

    /***
     */

    public double perimetro(){

        double perimetro=0.0;

        for(int i=0;i<puntos.length;i++){

            perimetro += puntos[i].distancia(puntos[i+1]);
        }
        perimetro+=puntos[puntos.length-1].distancia(puntos[0]);
        return perimetro;
    }
}

public class PoligonoApp
{
    public static void main(String[]ass){
       
        Punto [ ]  arrPuntos={new Punto(),new Punto (2,0),new Punto(2,2),new Punto(0,2)};
       
       
       
        Poligono poligono=new Poligono(arrPuntos);
       
       
       
       
        JOptionPane.showMessageDialog(null,poligono.numVertices());
       

       
       
       
        JOptionPane.showMessageDialog(null,poligono.toString());
       
       
    }
}

Compila y todo, pero al ejecutar
marca un NullPoniterException

creo que entiendo por que pasa eso, pero no se como arreglarlo
, persoda, no fui muy claro, :C
ayudame a checar ese codigo
debo tener un monton de cosas mal
y gracias por tomarte el tiempo

Perfecto, ahora si ya se está

Perfecto, ahora si ya se está en una posición "ayudable"

Olvide decirte que no pusieras todo, solo lo relevante pero sirvió.

NullPointerException significa que quisiste invocar un método o un atributo en una referencia que es nulo, ejemplo:

String string = null; // Este es nulo
string.length(); //<-- NullPointerException  no se puede llamar el método length() sobre null

Si ves el error viene el nombre del archivo, y la línea donde sucede el error:

$ java PoligonoApp
Exception in thread "main" java.lang.NullPointerException
        at Poligono.<init>(Punto.java:43) // <-- acá esta el Null
        at PoligonoApp.main(Punto.java:94) //<-- aqui empieza.

Si ves esa linea

        Poligono poligono=new Poligono(arrPuntos);

Esta creando una instancia de Poligono pasandole un arrePuntos, arriba esta inicializado así que ese no es el nulo, veamos la línea 43

    public Poligono(Punto[] punto) throws IllegalArgumentException {
        if (puntos.length<3) { //<-- línea 43
            throw new IllegalArgumentException ("No es un polígono");

Sucede que estás llamando el atributo length sobre puntos ( con "s" al final ) y el parametro que recibes es punto ( sin s ) , el atributo puntos esta declarado un par de líneas más arriba pero no está inicializado, entonces sigue siendo nulo.

Suerte!

gracias

Hey gracias, te entendí bien ,cambié eso
pero sigue habiendo un error,marca esto:

at Poligono.<init>(Poligono.java:45)

Poligono poligono=new Poligono(punto);//línea 45

y esto:
java.lang.StackOverFlowError
null

Resuelto

Solo faltaba

this.puntos=puntos;

por que si no quebaba nullo el arreglo jee
muchas gracias y saludos

El stackoverflow era porque

El stackoverflow era porque en el else llamabas al constructor de nuevo, que a su vez llamaba al constructor de nuevo que a su vez...

Super, que bueno que ya te quedó y de paso aprendiste como preguntar más eficazmente.

Saludo

De nuevo molestandote

Escriba una clase PoligonoColoreado se debe añadir un atributo color (de la clase Color del paquete java.awt), se deben agregar métodos para cambiar y obtener el color.

Escriba una aplicación en la que:

a) Cree un PoligonoColoreado de cuatro vértices que serán (0,0), (2,0), (2,2), (0,2) y de color rojo.

d) Cambie el color del PoligonoColoreado a azul.

¿Cómo crearia el poligonocoloreado de color rojo y como lo cambiaria a azul?
la verdad no comprendo como hacer eso :/

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">