Foro de elhacker.net

Programación => Java => Mensaje iniciado por: Lain0x en 20 Noviembre 2011, 18:44 pm



Título: Problema con clase
Publicado por: Lain0x en 20 Noviembre 2011, 18:44 pm
Hola, resulta que tengo una clase de nombre: Punto. Contiene un método que calcula distancia, pero el problema es que recibe un parámetro de tipo Punto.
Es un problema, porque ahora estoy haciendo una clase gráfica. La clase gráfica tiene un TextField que recibe a la variable tipo Punto, por medio de un evento de botón.

La clase Punto es esta:

Código:
public class Punto {
    private double x, y;
   
    public Punto(double x, double y)
    {
        this.x = x;
        this.y = y;
    }
   
    public Punto()
    {
        this.x = 0.0;
        this.y = 0.0;
    }
   
    public double getX()
    {
        return x;
    }
   
    public double getY()
    {
        return y;
    }
   
    public double calcularDistanciaDesde(Punto p)
    {
        double x1, y1;
        x1 = x - p.getX();
        y1 = y - p.getY();
        return Math.sqrt((x1*x1)+(y1*y1));
    }
   
}

Y el metodo ActionPerformed de la clase gráfica es este:

Código:
public void ActionPerformed(ActionEvent e){
Punto p1 = new Punto();
t1.setText(p1.calcularDistanciaDesde(p1));
}

No entiendo a la perfección la función de una variable tipo Punto. Se que permite llamar a funciones. Pero una vez que la paso como parámetro se supone que no toma un valor numérico.
Me podrían explicar o aclarar un poco?

Gracias.



Título: Re: Problema con clase
Publicado por: RyogiShiki en 20 Noviembre 2011, 19:01 pm
Hola.

Bueno a ver, no se bien lo que no entiendes, pero esto es lo que veo:

Tienes una clase llamada Punto que abstrae el concepto de punto. La clase tiene 2 Contructores, un constructor sin parámetros que inicializa los atributos de Punto a 0.0 y El otro recibe dos parámetros que asigna a los atributos x e y. La clase tiene además de los constructores dos métodos accesores (getx() y getY()) que devuelven el valor de los atributos. Y por último un método que recibe como parámetro un objeto de tipo punto que lo que hace es calcular la distancio entre el Objeto punto desde e que se llama el método y el Punto que se le pasa como parámetro.

Para poder calcular la distancia entre los dos debes tener dos objetos de tipo Punto, me imagino que al menos alguno de los dos o los dos son seteados por el usuario, así que al usuario le debes pedir los datos de la posición del punto (x, y), así cuando creas el objeto lo haces de la siguiente manera:

Código
  1. Punto punto = new Punto(x, y); //x e y datos pedidos al usuario.

puedes crear otro punto y pedir los datos al usuario o ponerlos tu. En cuyo caso tendrías:

Código
  1. Punto punto2 = new Punto(x2, y2); // siendo x2 e y2 datos pedidos al usuario o seteados por ti.

Ahora para calcular la distancia entre los dos puntos que se han creado solo basta con hacer:

Código
  1. punto.calcularDistanciaDesde(punto2);

Lo que retornará el resultado de la distancia entre los dos.

Ahora si creas el objeto con el constructor sin parámetros mi sugerencia es que añadas los métodos accesores (setters):

Código
  1. public double setX(double coorX) {
  2.    this.x = coorX;
  3. }
  4.  
  5. public double setY(double coorY) {
  6.    this.y = coorY;
  7. }
  8.  

Por último señalar que en estas lineas:
Código
  1. Punto p1 = new Punto();
  2. t1.setText(p1.calcularDistanciaDesde(p1));

Creas un Objeto de tipo punto con el constructor vacio (lo que deja los atributos en x = 0.0 e y = 0.0) y luego calculas la distancia entre el y el mismo. necesitas un segundo objeto para hacer el calculo. (No es que lo necesites, pero tendría más sentido)

Espero sea de ayuda.

Saludos