Autor Tema: Problema Hospital Java AYUDA  (Leído 225 veces)

danielvr

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 7
    • Ver Perfil
Problema Hospital Java AYUDA
« en: 17 de Julio 2021, 07:41 »
Hola, buenas noches, tengo que entregar un proyecto en java, cuyo problema es el siguiente:

En un hospital cuando se ingresa un paciente se solicita su nombre, edad,sexo,
padecimiento, tratamiento y al ingresar se crea un id, el cual es un n ́umero
aleatorio del 0 al 100. A partir del ejercicio del horario de hospital realizado en
clase, crear la clase Paciente.

1. En el archivo Paciente.java a completar el c ́odigo de acuerdo a los incisos
siguientes:
(a) Declarar los atributos : nombre, edad,sexo, padecimiento, tratamiento
e id, los cuales deben ser privados.
(b) Programar un constructor por par ́ametros. El id se deber ́a calcular
autom ́aticamente. HINT: Revisa la biblioteca Random, en especial
el m ́etodo nextInt(). Enlace de referencia sobre su uso
(c) Programar un constructor de copia.
(d) Programar los m ́etodos de acceso y modificadores.
(e) Programar un m ́etodo equals() que compare si 2 pacientes son iguales.

(f) Programar un m ́etodo toString() que imprima como el siguiente ejem-
plo:


(g) Programar un m ́etodo llamado aplicarTratamiento() que simule la
aplicaci ́on del tratamiento. Este recibir ́a un int que representa la
relaci ́on entre 2 horas para simular si ya tomo el medicamento o no
dependiendo la hora. HINT: Debes utilizar un m ́etodo de Hora que
te indica si una hora es mayor, igual o menor que otra Hora.


2. A completar las l ́ıneas de c ́odigo indicadas en el archivo HorarioPaciente.java
(a) Asignar un valor a las variables nombre, edad,sexo,tratamiento y
padecimiento por medio de Scanner.
(b) Crear un objeto paciente con los valores anteriores.
(c) Crear un otro objeto paciente mediante el constructor de copia con
el paciente anterior.
(d) Cambiar el valor de nombre del paciente2 por ”Luis”.
(e) Imprimir al paciente1.
(f) Imprimir al paciente2.
(g) A ̃nadir la condici ́on de comparaci ́on de 2 pacientes en el if().
(h) Guarda en una variable el valor que regresa el m ́etodo comparar de
la clase Hora con los objetos Hora actual y siguiente.
(i) Utiliza el m ́etodo aplicarTratamiento() e imprime el resultado.







Me anexan el codigo inicial, con el que debo meter todo:

public class Paciente{
    //Escribe los atributos de la clase

    /**
    *Constructor de un paciente asignando todos sus parametros
    * Debes asignar un valor aleatorio a id
    *@param nombre
    *@param edad
    *@param sexo
    *@param padecimiento
    *@param tratamiento
    */
    public Paciente(String nombre, int edad, String sexo, String padecimiento, String tratamiento){
        //Escribe aqui tu codigo
    }

    /**
    *Construcor de copia
    * @param p
    */
    public Paciente(Paciene p){
        //Escribe aqui tu codigo
    }

    /**
    * Método para asignar nombre
    * @param nombre
    */
    public void asignarNombre(String nombre){
        //Escribe aqui tu codigo
    }

    /**
    * Método para asignar edad de manera aleatoria
    */
    public void asignarId(){
        //Escribe aqui tu codigo
    }

    /**
    * Método para asignar edad
    * @param edad
    */
    public void asignarEdad(int Edad){
        //Escribe aqui tu codigo
    }

    /**
    * Método para asignar sexo
    * @param sexo
    */
    public void asignarSexo(String sexo){
        //Escribe aqui tu codigo
    }

    /**
    * Método para asignar padecimiento
    * @param padecimiento
    */
    public void asignarPadecimiento(String padecimiento){
        //Escribe aqui tu codigo
    }

    /**
    * Método para asignar tratamiento
    * @param tratamiento
    */
    public void asignarTratamiento(String tratamiento){
        //Escribe aqui tu codigo
    }

    /**
    * Método para obtener nombre
    * @return nombre
    */
    public String obtenerNombre(){
        //Escribe aqui tu codigo
    }

    /**
    * Método para obtener edad
    * @return edad
    */
    public int obtenerEdad(){
        //Escribe aqui tu codigo
    }

    /**
    * Método para obtener id
    * @return id
    */
    public int obtenerId(){
        //Escribe aqui tu codigo
    }

    /**
    * Método para obtener sexo
    * @return sexo
    */
    public String obtenerSexo(){
        //Escribe aqui tu codigo
    }

    /**
    * Método para obtener padecimiento
    * @return padecimiento
    */
    public String obtenerPadecimiento(){
        //Escribe aqui tu codigo
    }

    /**
    * Método para obtener tratamiento
    * @return tratamiento
    */
    public String obtenerTratamiento(){
        //Escribe aqui tu codigo
    }

    /**
    * 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){
        //Escribe aqui tu codigo
    }

    /**
    * Metodo que imprime un paciente
    * @return String que incluye todos los atributos del paciente
    */
    public String toString(){
        //Escribe aqui tu codigo
    }

    /**
    * Metodo que simula si un paciente ya recibio su tratamiento
    * @param esHora - entero que da la relación de orden entre
    * dos horas. >0, <0, =0
    * @return String  - mensaje de si ya tomo su medicamento, si ya es hora
    * de tomarlo o si aun no es la hora.
    */

    public String aplicarTratamiento(int esHora){
        //Escribe aqui tu codigo
    }



Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 680
    • Ver Perfil
Re: Problema Hospital Java AYUDA
« Respuesta #1 en: 17 de Julio 2021, 11:33 »
Hola Daniel.

A ver, nos dan esta clase/archivo Paciente.java para completar:

Código: [Seleccionar]
public class Paciente {

//Escribe los atributos de la clase

    /**
    *Constructor de un paciente asignando todos sus parametros
    * Debes asignar un valor aleatorio a id
    *@param nombre
    *@param edad
    *@param sexo
    *@param padecimiento
    *@param tratamiento
    */
    public Paciente(String nombre, int edad, String sexo, String padecimiento, String tratamiento){
        //Escribe aqui tu codigo
    }

    /**
    *Construcor de copia
    * @param p
    */
    public Paciente(Paciene p){
        //Escribe aqui tu codigo
    }

    /**
    * Método para asignar nombre
    * @param nombre
    */
    public void asignarNombre(String nombre){
        //Escribe aqui tu codigo
    }

    /**
    * Método para asignar edad de manera aleatoria
    */
    public void asignarId(){
        //Escribe aqui tu codigo
    }

    /**
    * Método para asignar edad
    * @param edad
    */
    public void asignarEdad(int Edad){
        //Escribe aqui tu codigo
    }

    /**
    * Método para asignar sexo
    * @param sexo
    */
    public void asignarSexo(String sexo){
        //Escribe aqui tu codigo
    }

    /**
    * Método para asignar padecimiento
    * @param padecimiento
    */
    public void asignarPadecimiento(String padecimiento){
        //Escribe aqui tu codigo
    }

    /**
    * Método para asignar tratamiento
    * @param tratamiento
    */
    public void asignarTratamiento(String tratamiento){
        //Escribe aqui tu codigo
    }

    /**
    * Método para obtener nombre
    * @return nombre
    */
    public String obtenerNombre(){
        //Escribe aqui tu codigo
    }

    /**
    * Método para obtener edad
    * @return edad
    */
    public int obtenerEdad(){
        //Escribe aqui tu codigo
    }

    /**
    * Método para obtener id
    * @return id
    */
    public int obtenerId(){
        //Escribe aqui tu codigo
    }

    /**
    * Método para obtener sexo
    * @return sexo
    */
    public String obtenerSexo(){
        //Escribe aqui tu codigo
    }

    /**
    * Método para obtener padecimiento
    * @return padecimiento
    */
    public String obtenerPadecimiento(){
        //Escribe aqui tu codigo
    }

    /**
    * Método para obtener tratamiento
    * @return tratamiento
    */
    public String obtenerTratamiento(){
        //Escribe aqui tu codigo
    }

    /**
    * 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){
        //Escribe aqui tu codigo
    }

    /**
    * Metodo que imprime un paciente
    * @return String que incluye todos los atributos del paciente
    */
    public String toString(){
        //Escribe aqui tu codigo
    }

    /**
    * Metodo que simula si un paciente ya recibio su tratamiento
    * @param esHora - entero que da la relación de orden entre
    * dos horas. >0, <0, =0
    * @return String  - mensaje de si ya tomo su medicamento, si ya es hora
    * de tomarlo o si aun no es la hora.
    */

    public String aplicarTratamiento(int esHora){
        //Escribe aqui tu codigo
    }

}

Y estos son los pasos a seguir:
Citar
(a) Declarar los atributos : nombre, edad,sexo, padecimiento, tratamiento
e id, los cuales deben ser privados.
(b) Programar un constructor por par ́ametros. El id se deber ́a calcular
autom ́aticamente. HINT: Revisa la biblioteca Random, en especial
el m ́etodo nextInt(). Enlace de referencia sobre su uso
(c) Programar un constructor de copia.
(d) Programar los m ́etodos de acceso y modificadores.
(e) Programar un m ́etodo equals() que compare si 2 pacientes son iguales.

(f) Programar un m ́etodo toString() que imprima como el siguiente ejem-
plo:


(g) Programar un m ́etodo llamado aplicarTratamiento() que simule la
aplicaci ́on del tratamiento. Este recibir ́a un int que representa la
relaci ́on entre 2 horas para simular si ya tomo el medicamento o no
dependiendo la hora. HINT: Debes utilizar un m ́etodo de Hora que
te indica si una hora es mayor, igual o menor que otra Hora.


Pues comienza, ves haciendo lo que puedas y lo que no te salga o veamos que pueda estar mal te ayudamos a corregirlo.
Por ejemplo, el primer paso que es declarar los atributos, no creo que te suponga un problema.
Hazlo, continúa con el resto y lo que no consigas, muestras por aquí tu código y te vamos ayudando.
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

danielvr

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 7
    • Ver Perfil
Re: Problema Hospital Java AYUDA
« Respuesta #2 en: 17 de Julio 2021, 16:23 »
Si, claro, sigo avanzando pero me surgieron nuevas dudas como: Asignación del id aleatorio, me da un error que no estoy seguro porque, y de si todo lo que he hecho esta correctamente bien planteado, al igual que la parte de la linea: * Metodo que compara si 2 pacientes son iguales
    * @param p
    * @return boolean - true si son iguales y false si son distintos
    */


AQUI MI AVANCE

import java.util.Random;
public class Paciente{
    //Escribe los atributos de la clase

private String nombre;
private int edad;
private String sexo;
private String padecimiento;
private String tratamiento;
private String id;
   
    /**
    *Constructor de un paciente asignando todos sus parametros
    * Debes asignar un valor aleatorio a id
    *@param nombre
    *@param edad
    *@param sexo
    *@param padecimiento
    *@param tratamiento
    */
    public Paciente(String nombre, int edad, String sexo, String padecimiento, String tratamiento){
        //Escribe aqui tu codigo
    }

    /**
    *Construcor de copia
    * @param p
    */
    public Paciente(Paciente p){
        //Escribe aqui tu codigo
         this.nombre = nombre;
        this.edad = edad;
        this.sexo = sexo;
        this.padecimiento = padecimiento;
        this.tratamiento = tratamiento;
        asignarId();
       
    }

    /**
    * Método para asignar nombre
    * @param nombre
    */
    public void asignarNombre(String nombre){
        //Escribe aqui tu codigo
         this.nombre = nombre;
    }

    /**
    * Método para asignar edad de manera aleatoria
    */
    public void asignarId(){
        //Escribe aqui tu codigo
         Random rnd = new Random();
        this.id = rnd.nextInt(101);
     
    }

    /**
    * Método para asignar edad
    * @param edad
    */
    public void asignarEdad(int Edad){
        //Escribe aqui tu codigo
                  this.edad = edad;
    }

    /**
    * Método para asignar sexo
    * @param sexo
    */
    public void asignarSexo(String sexo){
        //Escribe aqui tu codigo
                this.sexo = sexo;

    }

    /**
    * Método para asignar padecimiento
    * @param padecimiento
    */
    public void asignarPadecimiento(String padecimiento){
        //Escribe aqui tu codigo
              this.padecimiento = padecimiento;

    }

    /**
    * Método para asignar tratamiento
    * @param tratamiento
    */
    public void asignarTratamiento(String tratamiento){
        //Escribe aqui tu codigo
              this.tratamiento = tratamiento;

    }

    /**
    * Método para obtener nombre
    * @return nombre
    */
    public String obtenerNombre(){
        //Escribe aqui tu codigo
                return this.nombre;

    }

    /**
    * Método para obtener edad
    * @return edad
    */
    public int obtenerEdad(){
        //Escribe aqui tu codigo
                return this.edad;

    }


    /**
    * Método para obtener id
    * @return id
    */
    public int obtenerId(){
        //Escribe aqui tu codigo
                return this.id;

    }

    /**
    * Método para obtener sexo
    * @return sexo
    */
    public String obtenerSexo(){
        //Escribe aqui tu codigo
                return this.sexo;

    }

    /**
    * Método para obtener padecimiento
    * @return padecimiento
    */
    public String obtenerPadecimiento(){
        //Escribe aqui tu codigo
                return this.padecimiento;
    }

    /**
    * Método para obtener tratamiento
    * @return tratamiento
    */
    public String obtenerTratamiento(){
        //Escribe aqui tu codigo
                return this.tratamiento;

    }

    /**
    * 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){
        //Escribe aqui tu codigo
    }

    /**
    * Metodo que imprime un paciente
    * @return String que incluye todos los atributos del paciente
    */
    public String toString(){
        //Escribe aqui tu codigo
    }

    /**
    * Metodo que simula si un paciente ya recibio su tratamiento
    * @param esHora - entero que da la relación de orden entre
    * dos horas. >0, <0, =0
    * @return String  - mensaje de si ya tomo su medicamento, si ya es hora
    * de tomarlo o si aun no es la hora.
    */

    public String aplicarTratamiento(int esHora){
        //Escribe aqui tu codigo
    }

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 680
    • Ver Perfil
Re: Problema Hospital Java AYUDA
« Respuesta #3 en: 18 de Julio 2021, 00:20 »
El error que te da al generar ID, es que el atributo lo has declarado como String.
Código: [Seleccionar]
private String id;
El id, en este caso, ha de ser int
Código: [Seleccionar]
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.
Código: [Seleccionar]
    /**
    *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.
Código: [Seleccionar]
  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:

Código: [Seleccionar]
    /**
    * 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.

NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".