Autor Tema: Java Imprimir por consola en java con System.out; concatenar cadenas CU00632B  (Leído 4959 veces)

Pandemia

  • Avanzado
  • ****
  • APR2.COM
  • Mensajes: 258
    • Ver Perfil
Buenas noches aquí dejo una posible solución al ejercicio CU00632B del curso Aprenda  a programar en Java como si estuviera en primero.

Código: [Seleccionar]
/**
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
« última modificación: 11 de Agosto 2016, 18:45 de Mario R. Rancel »

Mario R. Rancel

  • Administrador
  • Experto
  • ********
  • APR2.COM
  • Mensajes: 1937
    • Ver Perfil
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.

Pandemia

  • Avanzado
  • ****
  • APR2.COM
  • Mensajes: 258
    • Ver Perfil
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.

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

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2228
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
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!
Responsable de departamento de producción aprenderaprogramar.com

Kabuto

  • Moderador Global
  • Avanzado
  • *******
  • Mensajes: 364
    • Ver Perfil
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:
Código: [Seleccionar]
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".

Código: [Seleccionar]
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:
Código: [Seleccionar]
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:
Código: [Seleccionar]
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:
Citar
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:
Código: [Seleccionar]
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...)
« última modificación: 21 de Agosto 2016, 00:42 de Kabuto »
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

Jesu

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 42
    • Ver Perfil
Hola cómo público mis ejercicios
« última modificación: 31 de Diciembre 2016, 12:10 de pedro,, »

pedro,,

  • Moderador Global
  • Experto
  • *******
  • APR2.COM
  • Mensajes: 1294
    • Ver Perfil
Hola Jesús, aquí tienes las normas básicas para publicar en el foro.

http://www.aprenderaprogramar.com/foros/index.php?topic=1460.0

Intenta preferentemente crear nuevos hilos y no usar los antiguos.

Saludos. ;D
« última modificación: 16 de Enero 2017, 19:51 de Ogramar »

 

Esto es un laboratorio de ideas...
Aprender a programar

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".