Problema con OBJETOS!!!!!!! HELP!!!! URGENTE!!

lokoxtinena
29 de Noviembre del 2005
Mi problema es el siguiente, he de implementar un método que sirva para "casar personas" entonces lo que debe hacer este es lo siguiente:

Las personasCiviles que contiene mi HashTable debe asociarlas de manera que sus atributos conyuges sean el miembro opuesto es decir de manera clara, lo que se me pide hacer es lo siguiente:

p1.conyuge que sea p2 y que p2.conyuge que sea p1

Yo lo que tengo es lo siguiente:

public static void casar(String dni1, String dni2) {
PersonaCivil p1 = (PersonaCivil) personas.get(dni1);
PersonaCivil p2 = (PersonaCivil) personas.get(dni2);
p1.conyuge = (PersonaCivil) personas.get(dni2);
p1.conyuge.setDni(dni2);
p2.conyuge = (PersonaCivil) personas.get(dni1);
p2.conyuge.setDni(dni1);
}

pero lo que me muestra por pantalla es lo siguiente:

Persona:
Nombre y Apellido: Nombre1 Apellido1
Edad: 25
DNI: 1234

Conyuge:
Nombre y Apellido: Nombre1 Apellido1
Edad: 25
DNI: 1234
Persona:
Nombre y Apellido: Nombre2 Apellido2
Edad: 26
DNI: 4321

Conyuge:
Nombre y Apellido: Nombre1 Apellido1
Edad: 25
DNI: 1234

No encuentro el modo de hacer que ambas se apunten sin machacarse o es que no acabo de enterder bien el código, me gustaría saber como puedo hacerlo.

Gracias por adelantado.!!

lokoxtinena
29 de Noviembre del 2005
Ayuda plis!!
Me urge bastante hacerlo ya que la entrega es para esta noche y solo me queda esta tontería y por una tontería no quiero perder nota, pero es que no caigo en como poderlo hacer.

Si alguien me pudiera echar un cable se lo agradecería eternamente.

GRACIAS POR ADELANTADO DE NUEVO!!

Pedro
29 de Noviembre del 2005
¿Y así no te funciona?

public static void casar(String dni1, String dni2) {
PersonaCivil p1 = (PersonaCivil) personas.get(dni1);
PersonaCivil p2 = (PersonaCivil) personas.get(dni2);
p1.conyuge = p2;
p2.conyuge = p1;
}

lokoxtinena
29 de Noviembre del 2005
Mira t muestro lo que me ha imprimido por pantalla:

Persona:
Nombre y Apellido: Nombre1 Apellido1
Edad: 25
DNI: 1234

Conyuge:
Nombre y Apellido: Nombre1 Apellido1
Edad: 25
DNI: 1234
Persona:
Nombre y Apellido: Nombre2 Apellido2
Edad: 26
DNI: 4321

Conyuge:
Nombre y Apellido: Nombre1 Apellido1
Edad: 25
DNI: 1234

Es decir, lo mismo.

se me ha ocurrido una preguntilla así mientras lo estaba intentando arreglar, el problema puede proceder de algun

this

????

lokoxtinena
29 de Noviembre del 2005
Ayudadme por favor!!!!

Necesito una respuesta para antes de las 19'00h por favor, me es muy necesario.

Pedro
29 de Noviembre del 2005
Deberias poner el código de PersonaCivil y el código de como pintas los resultados por pantalla... a ciegas no te puedo ayudar

lokoxtinena
29 de Noviembre del 2005
Mi clase Persona es esta:

import java.io.*;

public class Persona {
//Atributos de la persona
public String nombre;
public String apellido;
public int edad;

public Persona() {
String nombre, apellido;
int edad;
}

public Persona(String nombre, String apellido, int edad) {
this.nombre = nombre;
this.apellido = apellido;
this.edad = edad;
}


}

Persona Civil extiende de Persona; y esta es mi clase PersonaCivil:

public class PersonaCivil extends Persona {

public static PersonaCivil conyuge = null;
private String dni;

public boolean getcasado() {
if (conyuge != null) {
return true;
} else {
return false;
}
}

public PersonaCivil() {}

public PersonaCivil(String nombre, String apellido, int edad, String dni) {
this.nombre = nombre;
this.apellido = apellido;
this.edad = edad;
this.dni = dni;
}

public String getDni(PersonaCivil pers) {
return this.dni;
}

public void setDni(String dn) {
this.dni = dn;
}

public String toString() {
if (this.getcasado()){
return "nPersona:n Nombre y Apellido: " + nombre + " " + apellido + "n Edad: " + edad + "n DNI: " + getDni(this)+ "nn Conyuge:n Nombre y Apellido: " + conyuge.nombre + " " + conyuge.apellido + "n Edad: " + conyuge.edad + "n DNI: " + conyuge.getDni(conyuge);
}else{
return "nPersona:n Nombre y Apellido: " + nombre + " " + apellido + "n Edad: " +
edad + "n DNI: " + getDni(this) + "nn";
}
}
}

Luego para "casar personas" mi método es el siguiente:

public static void casar(String d1, String d2) {
//Escritura del conyuge de la primera PersonaCivil.
PersonaCivil p1 = obtenerPersona(d1);
p1.conyuge = obtenerPersona(d2);
p1.conyuge.setDni(d2);
//Escritura del conyuge de la segunda PersonaCivil.
PersonaCivil p2 = obtenerPersona(d2);
p2.conyuge = obtenerPersona(d1);
p2.conyuge.setDni(d1);
}

El problema creo que esta en algun this o alguna referencia pero bueno tu supongo que debes saber más que yo así que te leo.

Pedro
29 de Noviembre del 2005
El atributo conyuge no ha de ser estático, pq cada PersonaCivil tiene su conyuge. Al ser estático al modificar el de una persona cualquiera modificas el de todos... :


public static PersonaCivil conyuge = null; //MAL
public PersonaCivil conyuge = null; //BIEN


A parte yo cambiaría el método

public String getDni(PersonaCivil pers) {
return this.dni;
}

por:

public String getDni() {
return this.dni;
}
ya que no utilizas para nada el parámetro (PersonaCivil pers)


y el método casar lo dejaría como te he dicho en mi primer comentario para evitar código redundante que no hace nada.

Me debes una cerveza


lokoxtinena
29 de Noviembre del 2005
Merci tio!!
Hecho!!!