Foros del Web » Programación para mayores de 30 ;) » Java »

[SOLUCIONADO] Duda objetos

Estas en el tema de Duda objetos en el foro de Java en Foros del Web. Hola, tengo un problema, tengo un constructor al que le paso objeto1 para crear un objeto2 (el valor de objeto1 es 0 y en el ...
  #1 (permalink)  
Antiguo 07/06/2013, 12:55
 
Fecha de Ingreso: junio-2013
Mensajes: 28
Antigüedad: 10 años, 10 meses
Puntos: 1
Duda objetos

Hola, tengo un problema, tengo un constructor al que le paso objeto1 para crear un objeto2 (el valor de objeto1 es 0 y en el constructor le suma 1) y cuando paso de nuevo objeto1 al constructor (en este momento vale 1)para crear otro objeto2 en el constructor se le suma 1 y se queda en valor 2.

En este punto tenemos deberiamos tener esto:
objeto1 = 2

objeto2.1 = 1
objeto2.2 = 2


Pero lo que tengo es esto:
objeto1 = 2

objeto2.1 = 2
objeto2.2 = 2


el objeto uno es un codigo ej: DOC0, que por cada documento que creo se le suma un 1, DOC1, DOC2, DOC3. bien

Para que se me entienda mejor quiero que DOC* sea siempre el mismo objeto para no tener que crear un codigo cada vez que cree un objeto.
Codigo documento se compone de serie DOC por ejemplo y de numero que es el que aumento en 1 en cada Documento que creo nuevo.

mi codigo es este.
Muchisimas gracias por adelantado.


//CLASE MAIN
package documentos;
public class Main {
public static void main(String[] args) {

//CREAMOS EL CODIGO DOCUMENTO
CodigoDcto a = new CodigoDcto();

//CREAMOS EL DOCUMENTO CON EL CODIGO DOCUMENTO YA CREADO
Documento m = new Documento(a);
System.out.println(m.getCodigoDcto());

Documento n = new Documento(a);
System.out.println(m.getCodigoDcto());

}
}



//CLASE DOCUMENTO
package documentos;
import java.util.Date;

public class Documento {
private CodigoDcto codigo;
private Date fechaCreacion;
private int estado;

public Documento(CodigoDcto cod) {
//INCREMENTA EN 1 EL CODIGO DOCUMENTO
cod.sumaCodigoDcto();////////////////
/////////////////////////////////////
this.codigo = cod;
this.fechaCreacion = new Date();
this.estado = 0;
}
//OBTENER CODIGO
public String getCodigoDcto() {
String codigoDcto = (this.codigo.getSerie()+Integer.toString(this.codi go.getNumero()));
return codigoDcto;
}
}


//CLASE CODIGO DOCUMENTO
package documentos;
public class CodigoDcto {
//ATRIBUTOS
private String serie;
private int numero;

//CONSTRUCTORES
public CodigoDcto(){
this.serie = "doc";
this.numero = 0;
}

public CodigoDcto(String serie) {
this.serie = serie;
this.numero = 0;
}

public String sumaCodigoDcto() {
String codigoDcto = (serie+Integer.toString(numero));
return codigoDcto;
}

//GETTERS
public int getNumero() {
return numero;
}

public String getSerie() {
return serie;
}

public String getCodigoDcto() {
String codigoDcto = (serie+Integer.toString(numero));
return codigoDcto;
}
}
  #2 (permalink)  
Antiguo 07/06/2013, 13:19
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: Duda objetos

Hola,


//CREAMOS EL DOCUMENTO CON EL CODIGO DOCUMENTO YA CREADO
Documento m = new Documento(a);
System.out.println(m.getCodigoDcto());

Documento n = new Documento(a);
System.out.println(m.getCodigoDcto());


Hasta allí llegué, no se si habrá otra cosa después de eso.

Saludos,
  #3 (permalink)  
Antiguo 07/06/2013, 13:38
 
Fecha de Ingreso: junio-2013
Mensajes: 28
Antigüedad: 10 años, 10 meses
Puntos: 1
Respuesta: Duda objetos

no puedo modificar el post? esque lo he puesto mal.. lo pongo de nuevo aqui.
lo que me has subrayado de color rojo es que imprimo dos veces el documento1 para ver su valor y este cambia cuando creo documento2.

//CLASE MAIN
package documentos;
public class Main {
public static void main(String[] args) {

//CREAMOS EL CODIGO DOCUMENTO
CodigoDcto a = new CodigoDcto();

//CREAMOS DOCUMENTO1
Documento m = new Documento(a);

//IMPRIME EL DOCUMENTO1
System.out.println(m.getCodigoDcto());

//CREAMOS DOCUMENTO2
Documento n = new Documento(a);
//IMPRIME EL DOCUMENTO1
System.out.println(m.getCodigoDcto());

}
}


//CLASE DOCUMENTO
package documentos;
import java.util.Date;

public class Documento {
private CodigoDcto codigo;
private Date fechaCreacion;
private int estado;

public Documento(CodigoDcto cod) {
//INCREMENTA EN 1 EL CODIGO DOCUMENTO
cod.sumaCodigoDcto();
this.codigo = cod;
this.fechaCreacion = new Date();
this.estado = 0;
}
//OBTENER CODIGO
public String getCodigoDcto() {
String codigoDcto = (this.codigo.getSerie()+Integer.toString(this.codi go.getNumero()));
return codigoDcto;
}
}


//CLASE CODIGO DOCUMENTO
package documentos;
public class CodigoDcto {
//ATRIBUTOS
private String serie;
private int numero;

//CONSTRUCTORES
public CodigoDcto(){
this.serie = "doc";
this.numero = 0;
}

public CodigoDcto(String serie) {
this.serie = serie;
this.numero = 0;
}

//SUMA 1 AL NUMERO
public void sumaCodigoDcto() {
this.numero = this.numero+1;
}

//GETTERS
public int getNumero() {
return numero;
}

public String getSerie() {
return serie;
}

public String getCodigoDcto() {
String codigoDcto = (serie+Integer.toString(numero));
return codigoDcto;
}
}


Ahora si he puesto bien el codigo perdonar por haberlo puesto mal antes, bueno probarlo y vereis a lo que me refiero, gracias otra vez
  #4 (permalink)  
Antiguo 07/06/2013, 14:33
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: Duda objetos

Hola,

El problema es que guardas una referencia a un objeto y por lo tanto, cuando cambie el contenido del objeto se va reflejar en todos lados.

Es como decir que tienes un carro azul compartido con alguien, los dos ven que el carro es de color azul, pero si tu lo pintas de color rojo, todos lo van a ver de color rojo. Lo mismo sucede aquí, el objeto 'a' ...

Código:
Documento m = new Documento(a);
... está referenciado por todos los objetos de la clase Documento, ...

Código:
this.codigo = cod;
... cuando cambie cod porque quisiste que fuera el mismo objeto para reutilizarlo ...

Código:
this.numero = this.numero+1;
... todas las referencias van a ver que aumento en uno.

Código:
doc2
doc2
...
La única forma de corregirlo es que no guardes una referencia a un objeto que después vas a modificar y esperabas que mantuviera el valor anterior. Es decir, eso no es reutilizar un componente, porque mantiene un 'estado' que es único para cada objeto.

Saludos,
  #5 (permalink)  
Antiguo 07/06/2013, 14:37
 
Fecha de Ingreso: junio-2013
Mensajes: 28
Antigüedad: 10 años, 10 meses
Puntos: 1
Respuesta: Duda objetos

Ya sabia que era ese problema pero... como guardo ese objeto codigo como valor en el documento?

asi podria cambiar el codigo y el codigo de documentos no cambiaria pero no se hacerlo... gracias
  #6 (permalink)  
Antiguo 07/06/2013, 14:44
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: Duda objetos

Hola,

Usa un String, u solamente guarda el valor en ese String único de cada Documento, en lugar de guardar,
String codigo;

this.codigo = cod;

Usa,

this.codigo = cod.getCodigoDcto();

Saludos,
  #7 (permalink)  
Antiguo 07/06/2013, 15:03
 
Fecha de Ingreso: junio-2013
Mensajes: 28
Antigüedad: 10 años, 10 meses
Puntos: 1
Respuesta: Duda objetos

Muchisimas gracias, esto soluciono mi problema!! mil gracias!!

Etiquetas: clase, objetos, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:48.