Foros aprenderaprogramar.com
Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: Pandemia en 07 de Agosto 2016, 22:18
-
Buenas noches aquí dejo una posible solución al ejercicio CU00632B del curso Aprenda a programar en Java como si estuviera en primero.
/**
Ejercicio CU00632B
*/
public class Medico
{
private String nombre;
private String apellidos;
private int edad;
private boolean casado;
private String numeroDocumentoIdentidad;
private String especialidad;
//Constructor
public Medico (){
nombre = "";
apellidos = "";
edad = 0;
casado = false;
numeroDocumentoIdentidad = "";
especialidad = "";
}//cierre del método
//Métodos
public void setnombre (String valornombre){
nombre = valornombre;
System.out.println ("Ha cambiado el nombre del médico" + nombre + ". El nuevo nombre es " + nombre + ".");
}//cierre del método
public void setapellidos (String valorapellidos){
apellidos = valorapellidos;
System.out.println ("Ha cambiado los apellidos del médico " + apellidos + ". Los nuevos apellidos son " + apellidos + ".");
}//cierre del método
public void setedad (int valoredad){
edad = valoredad;
System.out.println ("Ha cambiado la edad del médico de nombre" + nombre + ". La nueva edad es " + edad + "años.");
}//cierre del método
public void setcasado (boolean valorcasado){
String dimeCasado = "";
casado = valorcasado;
if(casado == true){dimeCasado = "casado";} else {dimeCasado = "soltero";}
System.out.println ("Estado civil del médico de nombre es: " + nombre + ". El nuevo estado civil es: " + dimeCasado + ".");
}//cierre del método
public void setnumeroDocumentoIdentidad (String valornumeroDocumentoIdentidad){
numeroDocumentoIdentidad = valornumeroDocumentoIdentidad;
System.out.println ("Ha cambiado el DNI del médico de nombre " + nombre + ". El nuevo número de DNI es: " + numeroDocumentoIdentidad + ".");
}//cierre del método
public void setespecialidad (String valorespecialidad){
especialidad = valorespecialidad;
System.out.println ("Ha cambiado la especialidad el médico de nombre " + nombre + ". La nuena especialidad es: " + especialidad + ".");
}//cierre del método
public String getnombre() {return nombre;}//cierre del método
public String getapellidos() {return apellidos;}//cierre del método
public int getedad() {return edad;}//cierre del método
public boolean getcasado() {return casado;}//cierre del método
public String getnumeroDocumentoIdentidad() {return numeroDocumentoIdentidad;}//cierre del método
public String getespecialidad() {return especialidad;}//cierre del método
}//Cierre de la clase
Saludos y gracias por vuestro tiempo... :D
-
Buenas tardes
Al cambiar el nombre de un médico aparece el siguiente mensaje (por ejemplo si antes era nombre Juan y ahora se establece nombre Pedro):
Ha cambiado el nombre del médico Pedro. El nuevo nombre es Pedro.
Esto lógicamente no es correcto.
Es importante que antes de poner las soluciones en los foros pruebes tú mismo los ejercicios y compruebes si te da los resultados correctos. Si no obtienes resultados correctos, debes buscar información (en los propios foros podrás encontrar ejemplos) hasta conseguir los resultados correctos, o preguntar si no sabes cómo avanzar.
Te repito que es importante que hagas pruebas tú mismo antes de poner las soluciones en los foros, tenlo en cuenta. En este caso para probar el código debes crear un objeto con BlueJ e invocar sus métodos para comprobar que responder correctamente.
Saludos.
-
Buenas noches Mario, tienes razón tal y como lo he puesto no tiene nada de lógica, he revisado el código y ademas he puesto los atributos y variables con minúscula, ya que las tenia con mayúscula, a ver qué te parece.
/**
Ejercicio CU00632B
*/
public class Medico
{
private String nombre;
private String apellidos;
private int edad;
private boolean casado;
private String numeroDocumentoIdentidad;
private String especialidad;
//Constructor
public Medico (){
nombre = "";
apellidos = "";
edad = 0;
casado = false;
numeroDocumentoIdentidad = "";
especialidad = "";
}//cierre del método
//Métodos
public void setNombre (String valorNombre){
nombre = valorNombre;
System.out.println ("Ha cambiado el nombre del médico " + nombre + " a: " + nombre);
nombre = nombre;
}//cierre del método
public void setApellidos (String valorApellidos){
apellidos = valorApellidos;
System.out.println ("Ha cambiado los apellidos del médico " + apellidos + ". Los nuevos apellidos son " + apellidos + ".");
}//cierre del método
public void setEdad (int valorEdad){
edad = valorEdad;
System.out.println ("Ha cambiado la edad del médico de nombre " + nombre + ". La nueva edad es " + edad + "años.");
}//cierre del método
public void setCasado (boolean valorCasado){
String dimeCasado = "";
casado = valorCasado;
if(casado == true){dimeCasado = "Casado";} else {dimeCasado = "soltero";}
System.out.println ("Estado civil del médico de nombre es: " + nombre + ". El nuevo estado civil es: " + dimeCasado + ".");
}//cierre del método
public void setNumeroDocumentoIdentidad (String valorNumeroDocumentoIdentidad){
numeroDocumentoIdentidad = valorNumeroDocumentoIdentidad;
System.out.println ("Ha cambiado el DNI del médico de nombre " + nombre + ". El nuevo número de DNI es: " + numeroDocumentoIdentidad + ".");
}//cierre del método
public void setEspecialidad (String valorEspecialidad){
especialidad = valorEspecialidad;
System.out.println ("Ha cambiado la especialidad el médico de nombre " + nombre + ". La nuena especialidad es: " + especialidad + ".");
}//cierre del método
public String getNombre() {return nombre;}//cierre del método
public String getApellidos() {return apellidos;}//cierre del método
public int getEdad() {return edad;}//cierre del método
public boolean getCasado() {return casado;}//cierre del método
public String getNumeroDocumentoIdentidad() {return numeroDocumentoIdentidad;}//cierre del método
public String getEspecialidad() {return especialidad;}//cierre del método
}//Cierre de la clase
Saludos y gracias por tu tiempo...
-
Hola! Revísalo porque tienes cosas sin sentido como
nombre = nombre;
Creo entender lo que querías hacer pero ten en cuenta una cosa: es preferible que no definas una variable dentro de un método con el mismo nombre que un atributo de la clase, ya que puedes confundirte fácilmente. En caso de hacerlo tienes que usar this.nombre para diferenciar el atributo de la variable.
Saludos!
-
Suele ser muy útil, hacer "una traza" manual del programa que hemos escrito. Es decir, con papel y lápiz mismamente, listar las variables que estamos usando y apuntamos su valor actual.
Luego ejecutamos mentalmente las líneas del programa una por una y vamos apuntando en el papel los cambios de valor de las variables y que resultado obtendríamos en pantalla.
Es entonces cuando vemos los errores "de lógica" que estamos cometiendo.
Remarco lo "de lógica" porque estos errores no nos los pueden detectar los compiladores (aunque de alguno nos pueden avisar alguna vez), son errores que solo podemos detectar nosotros.
Por ejemplo, centrémonos en este código:
public void setNombre (String valorNombre){
nombre = valorNombre;
System.out.println ("Ha cambiado el nombre del médico " + nombre + " a: " + nombre);
nombre = nombre;
}
No hay ningún error "sintáctico", cualquier compilador dará por válido ese código. Sin embargo, sí hay erróres "de lógica"..
Hagamos la traza, supongamos que llamamos a este método pasando como argumento el String "Luis".
medico.setNombre("Luis");
Bien, este método utiliza dos variables, uno es "nombre" que es atributo de la clase y el otro es "valorNombre" que es el parámetro del própio método.
Estos serían sus valores iniciales:
- nombre = ""
- valorNombre = "Luis"
El atributo "nombre" está con cadena vacía porque es como se iniciaría según el contructor de la clase.
Bien, ejecutemos mentalmente la primera línea:
nombre = valorNombre;
El atributo "nombre" ha cambiado su valor, anotemoslo. En rojo guardamos el valor que tenía previamente, para recordarlo, aunque realmente ya se ha perdido.
- nombre = "", "Luis"
- valorNombre = "Luis"
Y ahora ejecutemos la siguiente línea:
System.out.println ("Ha cambiado el nombre del médico " + nombre + " a: " + nombre);
Veamos el resultado en pantalla, según los valores actuales de las variables:
Ha cambiado el nombre del médico Luis a: Luis
Humm, no obtenemos el resultado deseado. Habría que revisar la lógica del código y buscar otra fórmula para obtener el resultado que deseamos.
Está claro que usar en una sentencia dos veces la misma variable ("nombre" en este caso), esperando que por pantalla dicha variable muestre dos valores distintos, es un error de lógica. Es imposible.
Y es precisamente resolviendo estos errores que parecen tan tontos, cuando de verdad se aprende a programar.
Porque saber programar no es conocer la sintaxis y los comandos de un lenguaje. Saber programar es conseguir dar ordenes lógicas al ordenador.
Así que por ahora es mejor para tí que intentes solucionarlo tú, porque si te lo soluciona otra persona pierdes la oportunidad de aprender.
Hay varias formas de solucionarlo, unas más eficientes que otras, a ver cuál puedes encontrar tú.
Aún nos queda una línea de programa por ejecutar:
nombre = nombre;
Ha habido un cambio de valor en la variable "nombre", aunque bueno, en realidad no ha cambiado nada... :P
- nombre = "", "Luis", "Luis"
- valorNombre = "Luis"
Como ves, esto de apuntar a mano en un papel las variables que estamos usando, apuntar como cambia su valor tras cada línea de código ejecutada y simular qué resultado tendríamos en pantalla... es muy útil para ver si las órdenes que hemos dado, siguen o no la lógica que creíamos haber programado.
De hecho, esto mismo es lo que hacen los depuradores (debuggers) de los compiladores de programación.
Solo que cuando se trata de código sencillo, como este que son tres líneas y dos variables, es mucho más rápido e intuitivo hacerlo uno manualmente en papel (además agiliza la mente) que no ponerse a configurar y aprender a usar un debugger.
Que no es nada difícil tampoco, pero sí un poco engorroso y tiene más sentido usarlo en códigos más complejos.
Sigue publicando aquí tus dudas y no dejes de intentar resolver los errores de lógica de tu programa ya que, repito de nuevo, es aquí cuando realmente aprendes y cuando realmente desarrollas el ingenio para dar soluciones eficientes y no solo eficaces (eficiencia y eficacia no es lo mismo...)
-
Hola cómo público mis ejercicios
-
Hola Jesús, aquí tienes las normas básicas para publicar en el foro.
https://www.aprenderaprogramar.com/foros/index.php?topic=1460.0
Intenta preferentemente crear nuevos hilos y no usar los antiguos.
Saludos. ;D