Autor Tema: Ejercicio (CU00632B), imprimir por consola System.out. Concatenar cadenas Java  (Leído 3953 veces)

Dan_SB

  • Avanzado
  • ****
  • Mensajes: 273
  • *<DanielsCK>*
    • Ver Perfil
Buenos días

En esta oportunidad, quiero presentarles mi código sobre el siguiente ejercicio:

Considera estás desarrollando un programa Java donde necesitas trabajar con objetos de tipo Medico (que representa a un médico de un hospital). Define una clase Medico considerando los siguientes atributos de clase: nombre (String), apellidos (String), edad (int), casado (boolean), numeroDocumentoIdentidad (String), especialidad (String). Define un constructor asignando unos valores de defecto a los atributos y los métodos para poder establecer y obtener los valores de los atributos. En cada método, incluye una instrucción para que se muestre por consola un mensaje informando del cambio. Por ejemplo si cambia la especialidad del médico, debe aparecer un mensaje que diga: “Ha cambiado la especialidad del médico de nombre … . La nueva especialidad es: …”.

Hice 1 objeto medico, para no hacer tan extenso el código. Por cierto, tome nota y separe las clases. Una clase es el "Medico", la otra clase es el "Main"... vi a otro en este foro crear una clase para la lectura.. Decidí ponerlo a prueba con este código, aquí va:

Clase Main:
Código: [Seleccionar]
package MediCenter;

public class MainMedico {
    static String dato[] = new String [4];
    static int num;
    static boolean salir = false, ingresado = false, ok = false;
    static Medico medico1;
    static char elige;
   
    public static void main (String[]args){
        medico1 = new Medico();
       
        System.out.println("Buenas tardes.");
        do{
            System.out.println("Elija una de las siguientes opciones que desea realizar: ");
            System.out.println("Ingrese A para ingresar datos del medico.");
            System.out.println("Ingrese B para salir del programa.");
            elige = LeerDato.LeerCaracter();
            switch (elige){
                case 'A':
                case 'a':
                    ingresadorDato();                   
                break;
                case 'B':
                case 'b':
                    salir = true;
                break;
                default:
                    System.out.println("Caracter invalido.");
                break;
                }
        }while(salir == false);     
    }
   
    public static void ingresadorDato(){
        System.out.println("<---------------------------->");
        if (ok == false){
        System.out.println("Ingrese el nombre del medico: ");
        dato[0] = LeerDato.LeerCadena();
        System.out.println("Ingrese el apellido del medico: ");
        dato[1] = LeerDato.LeerCadena();
        System.out.println("¿Cuál es la edad del medico?: ");
        num = LeerDato.LeerNumero();
        System.out.println("Ingrese el numero de identidad del medico: ");
        dato[2] = LeerDato.LeerCadena();       
        System.out.println("Ingrese la especialidad del medico: ");
        dato[3] = LeerDato.LeerCadena();
        System.out.println("¿Es casado?: ");
        ingresado = LeerDato.LeerBooleano();
        medico1.setNombre(dato[0]);
        medico1.setApellido(dato[1]);
        medico1.setNumeroDocumentoIdentidad(dato[2]);
        medico1.setEspecialidad(dato[3]);
        medico1.setEdad(num);
        medico1.setCasado(ingresado);
        ok = true;
        }   
        else if (ok == true){
        System.out.println("Ingresa el nuevo nombre del medico: ");
        dato[0] = LeerDato.LeerCadena();
        System.out.println(medico1.getNombre() + " ahora se llama: " + dato[0] + ".");
        System.out.println("Ingresa el nuevo apellido de " + dato[0] + ".");
        dato[1] = LeerDato.LeerCadena();
        System.out.println("Antes el apellido de " + dato[0] + " era " + medico1.getApellido() + ", ahora su apellido es: " + dato[1] + ".");
        System.out.println("Ingresa la nueva edad de " + dato[0] + ".");
        num = LeerDato.LeerNumero();
        System.out.println(dato[0] + " tenia " + medico1.getEdad() + ",ahora tiene: " + num);
        System.out.println("Ingrese el nuevo numero de identidad de " + dato[0] + ".");
        dato[2] = LeerDato.LeerCadena();
        System.out.println(dato[0] + ", con numero de identidad: " + medico1.getNumeroDocumentoIdentidad() + "... ahora cambio a " + dato[2] + ".");
        System.out.println("Ingrese la nueva especialidad de " + dato[0] + ".");
        dato[3] = LeerDato.LeerCadena();
        System.out.println("La vieja especialidad de " + dato[0] + " era " + medico1.getEspecialidad() + ", ahora a cambiado a " + dato[3] + ".");
        medico1.setNombre(dato[0]);
        medico1.setApellido(dato[1]);
        medico1.setNumeroDocumentoIdentidad(dato[2]);
        medico1.setEspecialidad(dato[3]);
        medico1.setEdad(num);
        medico1.setCasado(ingresado);
        }
        System.out.println("<---------------------------->");
    }   
}

Clase medico
Código: [Seleccionar]
package MediCenter;

public class Medico {
    private String nombre, apellido, numeroDocumentoIdentidad, especialidad;
    private int edad;
    private boolean casado;
   
    public Medico(){
        nombre = "";
        apellido = "";
        numeroDocumentoIdentidad = "";
        especialidad = "";
        edad = 0;
        casado = false;
    }
   
    public void setNombre(String ingresoNombre){
        nombre = ingresoNombre;       
    }
   
    public void setApellido(String ingresoApellido){
        apellido = ingresoApellido;
    }
   
    public void setNumeroDocumentoIdentidad (String ingresoNumeroDocumentoIdentidad){
        numeroDocumentoIdentidad = ingresoNumeroDocumentoIdentidad;
    }
   
    public void setEspecialidad (String ingresoEspecialidad){
        especialidad = ingresoEspecialidad;
    }
   
    public void setEdad(int ingresoEdad){
        edad = ingresoEdad;
    }
   
    public void setCasado(boolean ingresoCasado){
        casado = ingresoCasado;
    }
   
    public String getNombre(){
        return nombre;
    }
   
    public String getApellido(){
        return apellido;
    }
   
    public String getNumeroDocumentoIdentidad(){
        return numeroDocumentoIdentidad;
    }
   
    public String getEspecialidad(){
        return especialidad;
    }
   
    public int getEdad(){
        return edad;
    }
   
    public boolean getCasado(){
        return casado;
    }
   
}


Clase LeerDato
Código: [Seleccionar]
package MediCenter;
import java.util.Scanner;

public class LeerDato {
    public LeerDato(){           
    }
   
    static char LeerCaracter(){
        Scanner in = new Scanner (System.in);
        char opcion = in.next().charAt(0);
        return opcion;
    }
   
    static String LeerCadena(){
        Scanner in = new Scanner (System.in);
        String dato = in.nextLine();
        return dato;
    }
   
    static int LeerNumero(){
        Scanner in = new Scanner (System.in);
        int num = in.nextInt();
        return num;
    }
   
    static boolean LeerBooleano(){
        Scanner in = new Scanner (System.in);
        boolean lel = in.nextBoolean();
        return lel;
    }
}

Intente primero ponerle los mensajes en la clase Medico como dice de insertarselo a cada método, pero no se me hacia posible manejar los objetos ahí... yo entendí que se deseaba insertarse los mensajes en cada método, no se si de esta forma es incorrecta o no. Aquí la ejecución:





Aquí hay por cierto, un misterio... se trata de los arreglos. Yo inicialize mi arreglo con 3 espacios originalmente, pero algo raro pasa... me suelta un "OutOfBonds", cosa que no debería ocurrir, porque con 3 estaría teniendo 4 espacios en realidad, forzosamente me vi obligado a cambiárselo a 4, que funciono:

0 = nombre
1 = apellido
2 = numero de identidad
3 = especialidad

Hace tiempo atras (no mucho) me sucedió que mi nextLine(); me dejaba un espacio, suponte que estoy insertando datos y me sale así la ejecución:

Ingrese nombre y apellido:
Cristian Grey
Ingrese cedula:
Ingrese Sexo:
Masculino
...
...

No me dejaba insertarle la cédula (en este ejemplo, originalmente era con libros) La solución que me dieron fue, volver a escribir abajo in.nextLine();... que funciono. Yo la verdad no creo que eso funcionara así, O quizá mi código se tomaba un espacio, quisiera saber porque sucedía esto (Y perdone que les aborde el tema de esta forma :S)

Código: [Seleccionar]
package ejemplo2;
import java.util.Scanner;
public class Ejemplo2 {
public static class inventario{
static String titulo[] = new String [25];
static String fecha_pub[] = new String [20];
static String autor[] = new String [30];
static int num = 0;
static int pedido = 0;
static float precio_venta = 0;
}
public static void main(String[] args) {
Scanner in = new Scanner (System.in);
int total = 0;
boolean A = false;
String b[] = new String [21];
char resp;
do {
System.out.println("Total libros: \n" + (total = total + 1));
System.out.println("¿Cual es el titulo?: ");
inventario.titulo[total] = in.nextLine();
System.out.println("Cual es la fecha de publicacion?: ");
inventario.fecha_pub[total] = in.nextLine();
System.out.println("Quien es el autor?");
inventario.autor[total] = in.nextLine();
System.out.println("¿Cuantos libros existen?: ");
inventario.num = in.nextInt();
System.out.println("¿Cuantos ejemplares existen pedidos?");
inventario.pedido = in.nextInt();
System.out.println("¿Cual es el precio de venta?");
inventario.precio_venta = in.nextFloat();
System.out.println("Imprimiendo...");
    System.out.println("Titulo del libro "+ total +" : "+ inventario.titulo[total]);
    System.out.println("Fecha de publicacion del libro " + total + " : " + inventario.fecha_pub[total]);
    System.out.println("Autor de "+ inventario.titulo[total] + " : " + inventario.autor[total]);
    System.out.println("Numero de libros existentes: " + inventario.num);
    System.out.println("Ejemplares pedidos: " + inventario.pedido);
    System.out.println("Precio de venta: " + inventario.precio_venta);
System.out.println("¿Hay mas libros?");
resp = in.next().charAt(0);
in.nextLine();   // <------------ La solución del problema
if (resp == 'N' ||  resp == 'n'){
A = true;
}
}while (A != true);   
}
}

Mil gracias y espero con ansias sus respuestas!
« Última modificación: 16 de Marzo 2015, 17:04 por Alex Rodríguez »
"Luchar por tus sueños y cumplirlos... eso es vivir.."

toni_apr

  • Avanzado
  • ****
  • Mensajes: 497
  • Curiosidad, es uno de los pilares del Conocimiento
    • Ver Perfil
Hola Dan

He visto tu ejercicio, y hay mucho que comentar:

¿Has oido esa frase que se atribuye a Napoleón Bonaparte que le decía a su asistente?
    Vísteme despacio que tengo prisa.

Pues yo te voy a pedir que vayas más despacio siguiendo este curso. No me refiero a que ralentizes las entregas, sino a que no quieras hacer más de lo que se pide en la lección del día.

Tu clase Medico que es la que se pedía, no está completa. Tal vez porque querías ponerlo en el main.
Pero he de decirte, que primero lo básico. Crear la clase Medico tal como te pedimos.
Y cuando eso lo tengas hecho, junto con los siguientes ejercicios. Ya llegaremos al método main.

Por decirlo de alguna manera, tu estás prestando atención al paso 4, cuando todavía estamos en el paso 2. Así pues, cada cosa a su tiempo.

Respecto a tu clase main voy a hacer un comentario global.
Parece que codificas para Java usando un estilo de programación de otro lenguaje. Y te puedo asegurar que no es apropiado.

Finalmente, he visto las imágenes con capturas de BetBeans, creo.
He de decirte que este curso está especialmente diseñado para seguirlo con el IDE BlueJ. Entre otras cosas, por las características inmejorables que tiene para la enseñanza de Java.

Así, que si no usas BlueJ, te lo recomiendo encarecidamente, por lo menos mientras vemos lo básico de Java. Luego puedes usar el IDE que quieras.

En la entrega CU00613B y siguiente tienes indicaciones sobre este IDE y cómo instalarlo.
Si tienes alguna pregunta no dudes en hacerla.

Te adjunto enlace al mismo ejercicio de otro usuario.
https://www.aprenderaprogramar.com/foros/index.php?topic=1462.msg7788#msg7788

Ah. Has enviado este mensaje dos veces. Son mensajes idénticos. He borrado uno para evitar confusiones.

Saludos

Dan_SB

  • Avanzado
  • ****
  • Mensajes: 273
  • *<DanielsCK>*
    • Ver Perfil
Chispas... ok ok, brain wash, Blue J, no mas main hasta que lo vea ni else, ni switch, ni arreglos ;s

Ya vi el ejercicio, creo que ya no vale la pena desarrollarlo, ya vi como lo hizo, mi disculpas de nuevo.

Gracias.
"Luchar por tus sueños y cumplirlos... eso es vivir.."

Dan_SB

  • Avanzado
  • ****
  • Mensajes: 273
  • *<DanielsCK>*
    • Ver Perfil
Creo que yo soy al que mas cosas le han dicho xDDD
"Luchar por tus sueños y cumplirlos... eso es vivir.."

 

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