Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: umadara en 27 de Junio 2016, 20:14
-
Buenas tardes otra vez, os subo mi resolución para el ejercicio del título CU00633B del taller de programación en lenguaje Java.
/**
* Clase de medico.
* @author (umadara)
* @version (1.0)
*/
public class medico
{ //nombre de la clase
//atributos de la clase
public String nombre; //nombre del medico
public String apellidos; //apellidos del medico
public int edad; //edad del medico
public boolean casado; //casado o no
public String numeroDNI; //numero documento de identidad
public String especialidad; //tipo de especialidad
public int faltaEdad; //años que faltan para que la edad sea multiplo de 5
//constructor
public medico () {
nombre = "Iván";
apellidos = "Soldado";
edad = 30;
casado = true;
numeroDNI = "12345678";
especialidad = "anestesia";
faltaEdad = 5;
} //fin del constructor
//metodos para establecer variables
//metodo nombre
public void setNombre (String valorNombre) {
nombre = valorNombre;
System.out.println ("el nombre del médico cambia a " + getNombre());
}
//metodo apellido
public void setApellidos (String valorApellidos) {
apellidos = valorApellidos;
System.out.println ("el apellido del médico " + getNombre() + " cambia a " + getApellidos());
}
//metodo edad
public void setEdad (int valorEdad) {
edad = valorEdad;
System.out.println ("la edad del médico " + getNombre() + " cambia a " + getEdad());
setFaltaEdad(valorEdad);
}
//metodo casado
public void setCasado (boolean valorCasado) {
casado = valorCasado;
System.out.println ("el estado matrimonial del médico " + getNombre() + " a cambiado a " + getCasado());
}
//metodo numero DNI
public void setNumeroDNI (String valorNumeroDNI) {
numeroDNI = valorNumeroDNI;
System.out.println ("el numero de DNI del médico " + nombre + " ha cambiado a " + getNumeroDNI());
}
//metodo especialidad
public void setEspecialidad (String valorEspecialidad) {
especialidad = valorEspecialidad;
System.out.println ("la especialidad del médico de nombre " + getNombre() + " ha cambiado a " + getEspecialidad());
}
//metodo para el calculo de multiplo de edad
public void setFaltaEdad (int valorFaltaEdad) {
System.out.println ("el médico de nombre "+ getNombre() + ", con especialidad " + getEspecialidad() + " tendrá una edad múltiplo de 5 dentro de " + calculaEdad(valorFaltaEdad) + " años");
}
//metodo obtener variables
//metodo nombre
public String getNombre () {return nombre; }
//metodo apellidos
public String getApellidos () {return apellidos; }
//metodo edad
public int getEdad () {return edad; }
//metodo casado
public boolean getCasado () {return casado; }
//metodo numero DNI
public String getNumeroDNI () {return numeroDNI; }
//metodo especialidad
public String getEspecialidad () {return especialidad; }
}
Creo que dentro de lo que cabe esta bien, aunque me lié mucho ya que cuando me salía un número múltiplo de 5, me ponía que faltaban 5 años. No subí la versión en la que resuelvo eso (con la ayuda de mi hermano), pero lo conseguí con el siguiente código (creo que no se ha visto todavía):
private int calculaEdad(int edad) {
int resultado = 0;
if (edad % 5 != 0) {
resultado = (faltaEdad - (edad % 5));
}
return resultado;
}
Os agradecería me dijeseis si debería saber hacer eso, por mirarme otra vez las lecciones.
Un saludo
-
Hola umadara:
He estado revisando tu ejercicio y veo que lo has hecho bien, felicitaciones por ello. Sin embargo déjame hacerte algunas observaciones que considero importantes desde el punto de vista de cómo pensar el código.
Defines un atributo llamado 'faltaEdad' donde guardarás la cantidad de años que le falta al médico para tener una edad múltiplo de 5.
Fíjate que ese es un dato superfluo ¿a qué me refiero con "superfluo"? Siempre a partir del campo 'edad' puedo calcular cuántos años le faltan para que su edad sea múltiplo de 5. Por lo tanto no usaré recursos del computador (en este caso un campo de instancia) para almacenar un dato que con un método puedo obtener en cualquier momento. Por lo tanto el atributo 'faltaEdad' no debiera existir, no es necesario almacenarlo, puedo calcularlo en cualquier momento a partir del atributo 'edad'.
Por lo tanto, en vez de definir el método 'setFaltaEdad', definimos un método llamado calculoParaMultiploEdad(), cuyo nombre tiene un poco más de sentido a lo que estamos pretendiendo hacer: un cálculo de edad, y no un 'set'.
¿Qué código debería incluir entonces este método calculoParaMultiploEdad()? pues mira cómo puede modificarse tu código a algo parecido a esto.
public void calculoParaMultiploEdad(){
int moduloEdad;
moduloEdad = edad % 5;
moduloEdad = 5 - moduloEdad;
System.out.println("El medico: " + nombre + " " + apellidos + " ,con especialidad: " + especialidad + " ,tendra una edad multiplo de 5 en " + moduloEdad + " anios.");
}
Y en este punto -conforme a lo que expresabas en tu post- hago una salvedad acerca de la interpretación de la consigna del ejercicio:
Si el médico tiene 47 años, pues le faltan 3 años para tener una edad múltiplo de 5.
Si el médico tiene 25 años, pues le faltan 5 años para tener una edad múltiplo de 5 (por más que actualmente tenga una edad múltiplo de 5).
Pero insisto, es una interpretación de la consigna, no tiene mayor importancia.
Último observación. En el constructor de la clase, deberías inicializar todos los campos a valor por defecto: los String inicializados a "", y los int a 0.
Espero haber sabido explicarme. Cualquier duda estamos aquí para revisarlo nuevamente.