Foros del Web » Programación para mayores de 30 ;) » Java »

problema muy extraño con creación de objetos en Java.

Estas en el tema de problema muy extraño con creación de objetos en Java. en el foro de Java en Foros del Web. Me estoy volviendo loco. Ya no se que más mirar ni donde buscar. Estoy haciendo una especie de programa de gestión de un hospital para ...
  #1 (permalink)  
Antiguo 20/08/2012, 11:07
 
Fecha de Ingreso: diciembre-2011
Mensajes: 134
Antigüedad: 12 años, 3 meses
Puntos: 5
problema muy extraño con creación de objetos en Java.

Me estoy volviendo loco. Ya no se que más mirar ni donde buscar.

Estoy haciendo una especie de programa de gestión de un hospital para estudiar y he creado una clase Persona la cual es padre de la Clase Paciente y Empleado.

En la clase Persona he colocado los atributos nombre, dni, telefono etc . Todos ellos con sus metodos get y set, asi como algunos metodos de validacion (dni correcto, telefonio corecto, 2 apellidos ) que los llamo antes de definir los atributos del objeto ( o sea, antes de igualar this.x = x en el metodo set de cada atributo )

luego para trabajar con herencias, la clase paciente y la clase empleado tienen sus propios atributos con sus metodos get y set y sus metodos de validacion.

El problema viene en la clase paciente. He creado los atributos enfermedad, tipoEnfermedad y tratamiento. La idea era que solo existiesen 4 tipos de enfermedades, A B C Y D, y dependiendo de una enfermedad un tratamiento podria ser valido o no. Me explico, si la enfermedad es tipo A solo podrá ser valido reposo o dieta blanda, si es tipo B solo aspirina o jarabe ...

Las clases me funcionan bien, he creado un panel de pruebas y perfecto, me funcionan todos los metodos. El problema viene cuando en otra ventana pretendo crear objetos en tiempo real.

he creado unos text a los cuales les introduzco los parametros que deseo y tras pulsar un boton creo los objetos. pues los atributos heredados de persona se introducen perfectamente (o no, dependiendo de si son validos o no ), pero los de la clase paciente, solo se introduce bien el primero (enfermedad), y tipoEnfermedad y tratamiendo no se introducen bien.

La putada es que si borro el textTipoEnfermedad.getText() y añado "A " (o sea, borro el metodo del text donde recojo lo escrito por el usuario y le doy un valor fijo), si que me funciona bien.

¿ Alguien me ha entendido? ¿ Alguien tiene una mínima idea de que puede suceder?


os pongo la clase paciente

Código Javascript:
Ver original
  1. package UsuariosHospital;
  2.  
  3. public class Paciente extends Persona {
  4.    
  5.     private String enfermedad;
  6.     private String tipoEnfermedad;
  7.     private String tratamiento;
  8.    
  9.    
  10.     public  Paciente (String nombre, String apellidos, String dni, String tfno, String direccion, String email , String enfermedad,
  11.             String tipoEnfermedad , String tratamiento)
  12.     {
  13.         super(nombre, apellidos, dni, tfno, direccion, email);
  14.        
  15.         setEnfermedad(enfermedad);
  16.         setTipoEnfermedad(tipoEnfermedad);
  17.         setMedicacion(tratamiento,tipoEnfermedad);
  18.        
  19.     }
  20.  
  21.    
  22.    
  23.     public void setEnfermedad (String enfermedad)
  24.     {
  25.         if (validarEnfermedad(enfermedad))
  26.             this.enfermedad = enfermedad;
  27.         else
  28.             this.enfermedad = "¡¡Enfermedad no valida!!";
  29.     }
  30.    
  31.     public void setTipoEnfermedad(String tipoEnfermedad)
  32.     {
  33.         if (validarTipoEnfermedad(tipoEnfermedad))
  34.             this.tipoEnfermedad = tipoEnfermedad;
  35.         else
  36.             this.tipoEnfermedad ="¡¡Tipo enfermedad no valida!!";
  37.     }
  38.    
  39.     // introducimos 2 valores al metodo validarMedicacion ya que nos hace falta conocer el tipo de enfermedad para poder medicar con criterio
  40.     public void setMedicacion (String tratamiento, String tipoEnfermedad)
  41.     {
  42.         if(validarTratamiento(tratamiento ,tipoEnfermedad)== 1)
  43.             this.tratamiento  = tratamiento;
  44.         else
  45.             this.tratamiento ="¡¡ Medicacion no valida !!";
  46.     }
  47.    
  48.     public String getEnfermedad ()
  49.     {
  50.         return this.enfermedad;
  51.     }
  52.    
  53.     public String getTipoEnfermedad ()
  54.     {
  55.         return this.tipoEnfermedad;
  56.     }
  57.    
  58.     public String getMedicacion()
  59.     {
  60.         return this.tratamiento;
  61.     }
  62.    
  63.     public String getPaciente()
  64.     {
  65.         return super.getPersona() + " \n"+ this.enfermedad + " "+ this.tipoEnfermedad +" " + this.tratamiento;
  66.     }
  67.    
  68.    
  69.     // metodos de la clase paciente
  70.     //--------------------------------------------------------------------------------------------------------------------------
  71.    
  72.     private Boolean validarEnfermedad (String enfermedad)
  73.     {
  74.         if (enfermedad.length() <= 2)
  75.             return false;
  76.         return true;
  77.     }
  78.    
  79.     private Boolean validarTipoEnfermedad (String tipoEnfermedad)
  80.     {
  81.         if(tipoEnfermedad =="A" || tipoEnfermedad =="a")
  82.             return true;
  83.         if(tipoEnfermedad =="B" || tipoEnfermedad =="b")
  84.             return true;
  85.         if(tipoEnfermedad =="C" || tipoEnfermedad =="c")
  86.             return true;
  87.         if(tipoEnfermedad =="D" || tipoEnfermedad =="d")
  88.             return true;
  89.        
  90.         return false;
  91.     }
  92.    
  93.     private int validarTratamiento (String tratamiento, String tipoEnfermedad)
  94.     {  
  95.         int result = 0;
  96.        
  97.        
  98.         if ((tipoEnfermedad == "A" || tipoEnfermedad == "a") && (tratamiento == "reposo" || tratamiento == "dieta blanda"))
  99.             result =1;
  100.         if ((tipoEnfermedad == "B" || tipoEnfermedad == "b") && (tratamiento == "aspirina" || tratamiento == "jarabe"))
  101.             result =1;
  102.         if ((tipoEnfermedad == "C" || tipoEnfermedad == "c") && (tratamiento == "calmantes" || tratamiento == "somniferos"))
  103.             result =1;
  104.         if ((tipoEnfermedad == "D" || tipoEnfermedad == "d") && tratamiento == "quirofano")
  105.             result =1;
  106.        
  107.         return  result ;
  108.     }
  109.    
  110. }



y como trabajo con la clase paciente en la ventana grafica

Código Javascript:
Ver original
  1. //creo la lista de pacientes
  2.         listaPacientes = new ArrayList<Paciente>();
  3.        
  4.         btnAnyadirPaciente = new Button(shell, SWT.NONE);
  5.         btnAnyadirPaciente.addSelectionListener(new SelectionAdapter() {
  6.             @Override
  7.             public void widgetSelected(SelectionEvent e) {
  8.                
  9.                 listaPacientes.add(new Paciente(textNombre.getText(), textApellidos.getText(),
  10.                         textDni.getText(), textTfno.getText(), textDireccion.getText(), textEmail.getText(),
  11.                         textEnfermedad.getText(),textTipoEnfermedad.getText(), textTratamiento.getText()));
  12.                 int coeficiente = 0;
  13.                
  14.                 lblVisorPacientes.setText(lblVisorPacientes.getText()+"\n" +listaPacientes.get(coeficiente).getPaciente());
  15.                 coeficiente ++;
  16.             }
  17.         });
  18.         btnAnyadirPaciente.setBounds(29, 312, 172, 25);
  19.         btnAnyadirPaciente.setText("A\u00F1adir paciente");
  #2 (permalink)  
Antiguo 20/08/2012, 12:01
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años
Puntos: 344
Respuesta: problema muy extraño con creación de objetos en Java.

Buenas,

Me parece que el problema que tienes es que las cadenas se comparan con el método equals, no con ==.

El operador == compara las referencias, no el valor de la cadena.

Es decir,

Código Java:
Ver original
  1. tipoEnfermedad.equals("A");
  2.  
  3. //ó
  4.  
  5. "A".equals(tipoEnfermedad); //Si quieres evitar el caso en el que tipoEnfermadad sea null sin poner explicítamente la condición tipoEnfermedad != null

Prueba con eso y me dices.

Saludos.
  #3 (permalink)  
Antiguo 20/08/2012, 12:42
Avatar de zero0097  
Fecha de Ingreso: abril-2010
Ubicación: México
Mensajes: 481
Antigüedad: 14 años
Puntos: 69
Respuesta: problema muy extraño con creación de objetos en Java.

asi es, como el tipo enfermedad es String, usa el metodo equals para comparar, ya sea como te dijo alex, o a menos que conviertas esa cadena a char entonces el uso de == es valido....

Tambien podrias validar que no existan espacios en blanco en esa cadena, con el metodo .trim()
__________________
De nada, hay te encargo +1...

Etiquetas: clase, creación, extraño, jar, objetos, programa, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:11.