Ayuda ejercicio sencillo (creo) Java

Iniciado por Bestialazo, 16 Octubre 2007, 20:51 PM

0 Miembros y 1 Visitante están viendo este tema.

Bestialazo

Bien, tengo que hacer una practica en la que tengo casi todo hecho (creo, y a mi manera porque es mi segunda practica con java xD) en la que tengo lo siguiente ahora mismo :

Por un lado la clase Punto

Código (java) [Seleccionar]
/**
* La clase Punto modela a un punto en el plano
* @author
* @version 1.0
*/
public class Punto {
/* Definimos los atributos del punto */
/** Coordenada X del punto. atributo de tipo int, que representa números enteros */
private int x;
/** Coordenada Y del punto */
private int y;

/* definición de métodos del punto */
/** Construye un punto a partir de sus coordenadas
* @param coordX es la coordenada x del nuevo punto
* @param coordY es la coordenada y del nuevo punto
*/
public Punto(int coordX, int coordY) {
x= coordX;
y= coordY;
}

/** Imprime por pantalla la situación del punto */
public void mostrarSituacion() {
System.out.println("Punto ("+x+","+y+")");
}
}


Por otro la clase Circulo

Código (java) [Seleccionar]
/**
* Modela un circulo a partir de su centro y su radio
* @author
* @version 1.0
*/
class Circulo {
/* Definición de atributos del círculo */
/** Centro */
private Punto centro;
/** Radio */
private int radio;
/** Color */
private int color;





/* Definición de métodos del círculo */
/** Construye un círculo a partir de su centro y su radio
* @param cnt es el centro del triángulo
* @param rad es el radio del círculo
*/
public Circulo(Punto cnt, int rad, int clr) {
centro = cnt;
radio = rad;
color = clr;
}
public Circulo(Punto cnt, int rad) {
centro = cnt;
radio = rad;
color = 0;
}

public  Circulo crearCirculo(Punto p) {
   centro = p;
return this;

}

/** dibuja el círculo en pantalla */
public void mostrarSituacion () {
System.out.println("Este círculo se define por:");
System.out.println("Un centro:");
centro.mostrarSituacion();
System.out.println("Y un radio:"+radio+"");
System.out.println("su color:"+color+"");

}


}


Y por ultimo el programa para trabajar con esa clase circulo

Código (java) [Seleccionar]
/**
* Programa que ilustra el manejo de objetos Circulo
* @author
* @version 1.0
*/
class PruebaCirculo {
public static void main(String args[]) {
/* creamos un punto que sera el centro del circulo */
Punto cnt = new Punto (1,1);


/* ...y le damos un valor al radio */
int rad = 3;
/* ...creamos el circulo */
Circulo c1 = new Circulo(cnt, rad, 2);
Circulo c2 = new Circulo(cnt, rad);
Circulo c3 = new Circulo(new Punto(-1,-1),2);
Circulo c4 = c3.crearCirculo(new Punto (3,1));
/*y dibujamos el circulo */
        c3.mostrarSituacion();
c4.mostrarSituacion();

}
}



Bien, el problema ocurre cuando lo ejecuto, en c3 en vez de mostrar que su centro es (-1,-1) se muestra el centro de c4.C4, funciona bien...
La verdad es q llevo bastante rompiendome la cabeza y no se me ocurre como arreglar esto, llevo bastante poco trabajando con java creo que se nota X-D.

Bueno, muchas gracias de antemano.

egyware

bueno tu problema es sencillo y te lo digo altiro
c3 y c4 son iguales por esta sentencia de tu clase circulo


public  Circulo crearCirculo(Punto p) {
centro = p;
return this; //<----
}

mejor crea un nuevo objeto con los datos de tu circulo actual

xauuu

Overloaded

Yo creo que el fallo esta mas bien cuando escribe:

Circulo c4 = c3.crearCirculo(new Punto (3,1));

Ahi lo que esta haciendo es Crear un nuevo circulo en la variable c3 y luego iguala c4 a esa nueva c3.

egyware

si ahi tb esta el problema pero
Circulo c4 = c3.crearCirculo(new Punto (3,1));
lo que hace aqui es guardar un nuevo punto del centro y c4 se iguala a c3 osea apuntan a la misma sección de memoria deberia crear un nuevo circulos con los datos que ya tiene y con el nuevo punto.