Foro de elhacker.net

Programación => Java => Mensaje iniciado por: framled en 12 Octubre 2011, 23:12 pm



Título: [Actualizado] Ayuda código Java
Publicado por: framled en 12 Octubre 2011, 23:12 pm
Hola a todos...
Tengo un gran problema acerca de este código de la clase "Cuadrado" que se detalla mas adelante...

Código
  1. //Clase cuadrado...
  2. public class Cuadrado extends Pieza{
  3. private Bloque[] bloque;
  4. public Cuadrado(double [] center, Color color){
  5.        super(center,color);
  6.        this.bloque = new Bloque[4];
  7.        for(int i = 0 ; i<4 ; i++){
  8.            this.bloque[i] = new Bloque(center,color);
  9.            if(i==1){center[0]++ ;center[1]--;}else{center[1]++;}
  10.        }
  11.    }
  12. }
  13.  

Hay algo malo en eso??
por favor estoy estudiando para cuando vuelva a clases me valla bien y necesito de su ayuda


Título: Re: AYUDAAAAA NECESITO AYUDA CON CODIGO JAVA KiEN ME AYUDA
Publicado por: Valkyr en 13 Octubre 2011, 01:43 am
Revisate toda la teoría que tengas, sobre todo los conceptos de herencia. Estás haciendo uso de super de una manera terrible.

Saludos.


Título: Re: AYUDAAAAA NECESITO AYUDA CON CODIGO JAVA KiEN ME AYUDA
Publicado por: framled en 13 Octubre 2011, 05:08 am
aaaaaaaaaaaaaaaaaaaaaaaaaaa siiiiii eso me temiaaa.... mis bases no son muy buenas y estoy practicando haciendo este tipo de clases xD...

algunos consejos???


Título: Re: Ayuda código Java
Publicado por: framled en 14 Octubre 2011, 04:18 am
Me podrian ayudar con el codigo.... q no entiendo en que me equivoque, por mas que leo la teoria

serai de gran ayuda gracias...


Título: Re: [Actualizado] Ayuda código Java
Publicado por: SXF en 15 Octubre 2011, 10:36 am
http://www.programacion.com/articulo/tutorjava_nivel_basico_97/21


Título: Re: [Actualizado] Ayuda código Java
Publicado por: Valkyr en 15 Octubre 2011, 16:05 pm
Viendo que has actualizado el código, ¿a que te refieres con que si está mal? ¿No te da el resultado esperado? ¿Cuál es el resultado que esperas que te de?


Título: Re: [Actualizado] Ayuda código Java
Publicado por: framled en 15 Octubre 2011, 21:00 pm
Viendo que has actualizado el código, ¿a que te refieres con que si está mal? ¿No te da el resultado esperado? ¿Cuál es el resultado que esperas que te de?

si esta mal escrito me refiero a que aun me da el mismo error anterior (cada bloque tenia como centro el mismo centro que el bloque[3];)
quiero que cada bloque tenga un centro de:
bloque[0] = {4.5 , 13.5}
bloque[1] = {4.5 , 14.5}
bloque[2] = {5.5 , 13.5}
bloque[3] = {5.5 , 14.5}

http://www.programacion.com/articulo/tutorjava_nivel_basico_97/21

gracias por los pauntes


Título: Re: [Actualizado] Ayuda código Java
Publicado por: Valkyr en 15 Octubre 2011, 23:38 pm
El error se llama "Aliasing".

En Java todo lo que le pasas a una función como parametro, lo que se pasa realmente es el identificador de objeto (su referencia en memoria, por decirlo de alguna forma), por tanto las modificaciones que realices sobre dicho objeto se verán reflejadas fuera.

Es decir, aunque no hicieses esta modificación:
Código
  1. if(i==1){center[0]++ ;center[1]--;}else{center[1]++;}
todos tus objetos seguirían teniendo el mismo centro.

¿Cuál puede ser la solución? Realizar una copia del array y asignarle al centro la copia, o crear un array nuevo y ponerle los distintos valores.

Te recomiendo que te leas muchos muchos muchos apuntes, si no dominas estas cosas tan básicas, estás perdido en Java.

Saludos.


Título: Re: [Actualizado] Ayuda código Java
Publicado por: framled en 16 Octubre 2011, 01:54 am
¿Cuál puede ser la solución? Realizar una copia del array y asignarle al centro la copia, o crear un array nuevo y ponerle los distintos valores.

Te refieres a algo como esto??:

Código
  1. //Clase cuadrado...
  2. public class Cuadrado extends Pieza{
  3. private Bloque[] bloque;
  4. public Cuadrado(double [] center, Color color){
  5.        super(center,color);
  6.        this.bloque = new Bloque[4];
  7.        Bloque bloq = new Bloque[4];
  8.        for(int i = 0 ; i<4 ; i++){
  9.            bloq[i] = new Bloque(center,color);
  10.            if(i==1){center[0]++ ;center[1]--;}else{center[1]++;}
  11.        }
  12.        this.bloque = bloq;
  13.    }
  14. }
  15. }
  16.  

es el mismo error...
Gracias SALUDOS


Título: Re: [Actualizado] Ayuda código Java
Publicado por: Valkyr en 16 Octubre 2011, 14:10 pm
No, no me refiero a eso, me refiero a algo así:
Código
  1. public void metodo(double[] centro){
  2.    //Suponiendo que centro solo tiene dos posiciones:
  3.    double[] nuevo = new double[2];
  4.    nuevo[0] = centro[0];
  5.    nuevo[1] = centro[1];
  6.    bloque = new Bloque(nuevo, color);
  7. }

algo así me refiero. Tienes que realizar una copia del array, porque me imagino que al hacer estas dos llamadas:
Código
  1. super(center,color);
  2. bloq[i] = new Bloque(center,color);

dentro del código de cada constructor estarás haciendo algo así:
Código
  1. this.centro = center //<-Aliasing

En resumen, tienes que hacer una copia del array si quieres tener centros distintos e independientes.

Y te vuelvo a repetir, leete mucha más teoría. La práctica es necesaria, pero la teoría es mucho más importante.

Saludos.