El error que te da al generar ID, es que el atributo lo has declarado como String.
private String id;
El id, en este caso, ha de ser int
private int id;
Otra cosa que has de corregir son los constructores.
Esta clase va a tener dos constructores, uno "normal" y otro que recibe un objeto Paciente a partir del cuál hacer una copia.
En el constructor "normal", no has puesto ningún código.
Y el constructor "por copia", has puesto el código que deberías poner en el constructor "normal".
El constructor "por copia", lo que ha de hacer es obtener del Paciente que recibe, el valor de sus atributos para asignárselos al Paciente que se va a construir.
/**
*Constructor de copia
* @param p
*/
public Paciente(Paciente p){
//Escribe aqui tu codigo
id = p.obtenerId();
nombre = p.obtenerNombre();
etc...
}
Fíjate que en este constructor, no es necesario usar la palabra reservada this (aunque muchos programadores gustan de usarla igualmente).
No lo es porque no hay duda de que cuando nombramos a id, nombre, edad, sexo,... nos estamos refiriendo a los atributos de esta clase.
Sí es necesario usarlo en el constructor normal, y esto es porque los valores que se reciben entre paréntesis, se llaman igual que los atributos de la clase.
public Paciente(String nombre, int edad, String sexo, String padecimiento, String tratamiento){
this.nombre = nombre;
etc....
}
Como se llaman exactamente igual los parámetros recibidos como los atributos, hay que usar this para aclarar cuándo hacemos referencia a los atributos.
Sobre el método equals.
Aquí hay que decidir cuándo dos Pacientes son iguales, o más bien dicho, equivalentes
Esto es decisión del programador, él decide que regla se aplica para considerar si dos objetos son iguales o no.
Puesto que tenemos un atributo id, atributo que se supone ha de ser un identificador único y no deberían existir dos Pacientes con el mismo id, podemos imponer la regla de que dos Pacientes con el mismo id son el mismo Paciente.
Da igual si tienen distinto nombre, edad o sexo... si tienen el mismo id, automáticamente serán considerados la misma entidad.
Esto sirve precisamente para facilitar el poder impedir que tengamos Pacientes con identificadores repetidos.
Suponiendo que guardásemos los Pacientes en alguna colección, como un ArrayList por ejemplo, antes de añadir un Paciente gracias al método equals() podríamos consultar rápidamente si ya hay algún Paciente con el mismo ID que el Paciente que queremos añadir, en cuyo caso rechazaríamos el nuevo Paciente hasta que se le asigne otro ID.
Bien, ¿y cuál es el código para imponer esta regla?
Pues nos basta con una sola línea de código:
/**
* Metodo que compara si 2 pacientes son iguales
* @param p
* @return boolean - true si son iguales y false si son distintos
*/
public boolean equals(Paciente p){
return id == p.id;
}
Ahí lo que hacemos es comparar el id de ESTE paciente (de nuevo no es necesario usar la palabra this) con el id del Paciente que recibe el método entre paréntesis.
Y retornamos el resultado de esta comparación.
Si los id son iguales, se retornará TRUE, y por lo tanto los dos Pacientes se considerarán equivalentes/iguales.
Si los id son distintos, se retorna FALSE.
Aplica lo que he explicado, pregunta si algo no ha quedado claro, y sigue completando lo que falta.
Cuando hayamos terminado la clase Paciente, se nos piden más cosas pero parece que es modificando una clase llamada HorarioPaciente.java, clase que se supone debes tener de un ejercicio anterior.