Resultados 1 al 3 de 3

Problema registros Java

  1. #1 Problema registros Java 
    Iniciado
    Fecha de ingreso
    Apr 2009
    Mensajes
    13
    Descargas
    1
    Uploads
    0
    Hola a todos,

    Estoy haciendo un consultorio medico para un ejercicio de la carrera, y quiero que mi estructura de datos sea que la consulta sea un vector de tipo Paciente, conde paciente es un registro con los siguientes campos: nombre,apellido1,apellido2,edad,numero de la ssocial, historial. Cada historial por su parte sera un vector de tipo Visita, donde Visita es un registro con los siguientes campos: dia, mes, año, resumen. El vector historial solo puede tener 20 posiciones[0..19]. Tengo que implementar un metodo que me permita añadir una visita al historial de un paciente, y es aqui en este metodo, donde se me produce un fallo del tipo: NullPointerException, en la linea 50 en el metodo añadeVisita. Si yo ya he inicializado todo el vector no entiendo porque sucede ese fallo. Os agradeceria que me ayudaseis en la medida de lo posible. Os adjunto el codigo completo de mi programa.

    Muchas gracias a todos y perdon por las molestias.
    Código:
    import java.io.*;
    public class ConsultaMedica {
    	
    	/**
    	 * Registro donde se guardan los datos de la visita
    	 * @author Juanito
    	 *
    	 */
    	static class Visita{
    		int dia=0,mes=0,año=0;
    		String resumen="";
    	}
    	
    	/**
    	 * Registro donde se guardan los datos del paciente
    	 * @author Juanito
    	 *
    	 */
    	static class Paciente{
    		String nombre="",apellido1="",apellido2="";
    		int edad=0,ssocial=0;
    		Visita[] historial;
    	}
    	
    	/**
    	 * Añade un nuevo paciente a una posicion libre de la consulta.
    	 * @param consulta Consulta a la que añadir el paciente(en este caso solo hay una en todo el programa)
    	 * @param P Paciente que se desea añadir a la consulta
    	 */
    	public static void altaNuevo(Paciente[]consulta,Paciente P){
    		for(int i=0;i<consulta.length;i++){
    			if(consulta[i].ssocial==0){
    				consulta[i]=P;
    				System.out.println("Añadido");
    				return;
    			}
    		}
    	}
    	
    	/**
    	 * Añade una visita al historial de un paciente de la consulta
    	 * @param consulta Consulta a la que añadir la vistia del paciente(en este caso solo hay una en todo el programa)
    	 * @param ssocial Numero de la seguridad social del paciente al que se quiere añadir la visita
    	 * @param visitaPreparada Visita con los datos de la visita que sera añadida al paciente
    	 */
    	public static void añadeVisita(Paciente[]consulta, int ssocial, Visita visitaPreparada){
    		int n=0;
    		for(int i=0;i<consulta.length;i++){
    			if(consulta[i].ssocial==ssocial){
    				consulta[i].historial[n]=visitaPreparada;
    				n++;
    				return;
    			}
    		}
    	}
    	
    	/**
    	 * Elimina un paciente de la consulta
    	 * @param consulta Consulta a la que eliminar el paciente(en este caso solo hay una en todo el programa)
    	 * @param ssocial Numero de la seguridad social del paciente que se quiere elminar
    	 */
    	public static void borrarPaciente(Paciente[]consulta, int ssocial){
    		Paciente pacienteVacio=new Paciente();
    		for(int i=0;i<consulta.length;i++){
    			if(consulta[i].ssocial==ssocial){
    					consulta[i]=pacienteVacio;
    					System.out.println("Eliminado");
    					return;
    			}
    		}
    	}
    	
    	
    	/**
    	 * Metodo principal
    	 * @param args
    	 */
    	public static void main(String[] args) throws IOException{
    		
    		//Variables****************************************
    		BufferedReader entrada = new BufferedReader(new InputStreamReader(System.in));//Buffer de entrada de teclado
    		Paciente[] consulta;//Consulta medica como array de pacientes
    		int opcionElegida;//Opcion elegida en el menu principal
    		int numeroProvisional;//Numero de la seguridad social que usare para la busqueda en los metodos borraPaciente, añadeVisita()
    		
    		//Acciones*****************************************
    		consulta=new Paciente[50];//Dimensionado de la consulta(50 pacientes)
    		for(int i=0;i<consulta.length;i++){//Inicializo todas las posiciones del array consulta(todos los pacientes)
    			consulta[i]=new Paciente();
    			consulta[i].historial=new Visita[20];
    			for(int j=0;j<consulta[i].historial.length;j++){
    				consulta[i].historial[j]=new Visita();
    			}
    		}
    		
    		
    		do{
    			//Muestro el menu en primera estancia para elegir una de las opciones
    			System.out.println("··························MENU···················\n"+	
    								"|						|\n"+			
    								"|	1.Alta de un nuevo paciente		|\n"+
    								"|	2.Añadir visita				|\n"+
    								"|	3.Borrar por completo un paciente	|\n"+
    								"|	4.Buscar paciente sabiendo apellido1	|\n"+
    								"|	5.Ver lista de pacientes en una fecha	|\n"+
    								"|	6.Salir					|\n"+
    								"|						|\n"+
    								"·················································");
    			//Solicito la opcion elegida por teclado
    			System.out.println("Eliga la opcion: ");
    			opcionElegida=Integer.parseInt(entrada.readLine());
    			
    			switch(opcionElegida){
    			
    				//Opcion 1
    				case 1:
    				Paciente P=new Paciente();
    				System.out.println("Nombre: ");
    				P.nombre=entrada.readLine();
    				System.out.println("Primer Apellido: ");
    				P.apellido1=entrada.readLine();
    				System.out.println("Segund Apellido: ");
    				P.apellido2=entrada.readLine();
    				System.out.println("Edad: ");
    				P.edad=Integer.parseInt(entrada.readLine());
    				System.out.println("Numero de la seguridad social: ");
    				P.ssocial=Integer.parseInt(entrada.readLine());
    				altaNuevo(consulta,P);
    					break;
    			
    				//Opcion 2
    				case 2:
    					Visita visitaPreparada=new Visita();
    					System.out.println("Indique el numero de seguridad social del paciente que va a realizar la visita: ");
    					numeroProvisional=Integer.parseInt(entrada.readLine());
    					System.out.println("Dia: ");
    					visitaPreparada.dia=Integer.parseInt(entrada.readLine());
    					System.out.println("Mes: ");
    					visitaPreparada.mes=Integer.parseInt(entrada.readLine());
    					System.out.println("Año: ");
    					visitaPreparada.año=Integer.parseInt(entrada.readLine());
    					System.out.println("Resumen de la visita: ");
    					visitaPreparada.resumen=entrada.readLine();
    					añadeVisita(consulta,numeroProvisional,visitaPreparada);
    					break;
    				
    				//Opcion 3
    				case 3:
    					System.out.println("Indique el numero de seguridad social del paciente que quiere eliminar: ");
    					numeroProvisional=Integer.parseInt(entrada.readLine());
    					borrarPaciente(consulta,numeroProvisional);
    					break;
    				
    				//Opcion 4
    				case 4:
    					break;
    				
    				//Opcion 5
    				case 5:
    					break;
    					
    				//Opcion 6
    				case 6:
    					System.out.println("ADIOS");
    					break;
    					
    			
    				
    			}
    			
    			
    		}while(opcionElegida!=6);
    }
    }
    como veis aun quedan metodos por implementar, pero hasta que este no me funcione no puedo seguir.

    Gracias
    ---------------
    Hispasat88
    Citar  
     

  2. #2  
    Iniciado
    Fecha de ingreso
    Apr 2009
    Mensajes
    13
    Descargas
    1
    Uploads
    0
    Despues de un ratillo ya he conseguido solucionar el problema de antes. La cuestion era que cuando añades un nuevo paciente, este no lleva inicializado el vector historial de visitas, y por eso no puedes añadir una nueva visita. Asi de sencillo. he implementado el metodo inicializaVisitas, que permite inicializar ese vector sin tener que escribir siempre el mismo bucle en todos los metodos y casos del switch. Bueno posteo el codigo ya corregido
    Código:
    import java.io.*;
    public class ConsultaMedica {
    	
    	/**
    	 * Registro donde se guardan los datos de la visita
    	 * @author Juanito
    	 *
    	 */
    	static class Visita{
    		int dia=0,mes=0,año=0;
    		String resumen="";
    	}
    	
    	/**
    	 * Registro donde se guardan los datos del paciente
    	 * @author Juanito
    	 *
    	 */
    	static class Paciente{
    		String nombre="",apellido1="",apellido2="";
    		int edad=0,ssocial=0;
    		Visita[] historial;
    	}
    	
    	/**
    	 * Añade un nuevo paciente a una posicion libre de la consulta.
    	 * @param consulta Consulta a la que añadir el paciente(en este caso solo hay una en todo el programa)
    	 * @param P Paciente que se desea añadir a la consulta
    	 */
    	public static void altaNuevo(Paciente[]consulta,Paciente P){
    		for(int i=0;i<consulta.length;i++){
    			if(consulta[i].ssocial==0){
    				consulta[i]=P;
    				System.out.println("Añadido");
    				return;
    			}
    		}
    	}
    	
    	/**
    	 * Inicializa el vector de 20 visitas en cada paciente
    	 * @param P Paciente al que se desea inicializar su vector historial de visitas
    	 */
    	public static void inicializaVisitas(Paciente P){
    		P.historial=new Visita[20];
    		for(int i=0;i<P.historial.length;i++){
    			P.historial[i]=new Visita();
    		}
    	}
    	
    	/**
    	 * Añade una visita al historial de un paciente de la consulta
    	 * @param consulta Consulta a la que añadir la vistia del paciente(en este caso solo hay una en todo el programa)
    	 * @param ssocial Numero de la seguridad social del paciente al que se quiere añadir la visita
    	 * @param visitaPreparada Visita con los datos de la visita que sera añadida al paciente
    	 */
    	public static void añadeVisita(Paciente[]consulta, int ssocial, Visita visitaPreparada){
    		for(int i=0;i<consulta.length;i++){
    			if(consulta[i].ssocial==ssocial){
    				for(int j=0;j<=consulta[i].historial.length;j++){
    					if(consulta[i].historial[j].dia==0){
    						consulta[i].historial[j]=visitaPreparada;
    						System.out.println("Visita añadida con exito");
    						return;
    					}
    				}
    			}
    		}
    	}
    	
    	/**
    	 * Elimina un paciente de la consulta
    	 * @param consulta Consulta a la que eliminar el paciente(en este caso solo hay una en todo el programa)
    	 * @param ssocial Numero de la seguridad social del paciente que se quiere elminar
    	 */
    	public static void borrarPaciente(Paciente[]consulta, int ssocial){
    		Paciente pacienteVacio=new Paciente();
    		inicializaVisitas(pacienteVacio);
    		for(int i=0;i<consulta.length;i++){
    			if(consulta[i].ssocial==ssocial){
    					consulta[i]=pacienteVacio;
    					System.out.println("Eliminado");
    					return;
    			}
    		}
    	}
    	
    	
    	/**
    	 * Metodo principal
    	 * @param args
    	 */
    	public static void main(String[] args) throws IOException{
    		
    		//Variables****************************************
    		BufferedReader entrada = new BufferedReader(new InputStreamReader(System.in));//Buffer de entrada de teclado
    		Paciente[] consulta;//Consulta medica como array de pacientes
    		int opcionElegida;//Opcion elegida en el menu principal
    		int numeroProvisional;//Numero de la seguridad social que usare para la busqueda en los metodos borraPaciente, añadeVisita()
    		
    		//Acciones*****************************************
    		consulta=new Paciente[2];//Dimensionado de la consulta(50 pacientes)
    		for(int i=0;i<consulta.length;i++){//Inicializo todas las posiciones del array consulta(todos los pacientes)
    			consulta[i]=new Paciente();
    			inicializaVisitas(consulta[i]);
    		}
    		
    		do{
    			//Muestro el menu en primera estancia para elegir una de las opciones
    			System.out.println("··························MENU···················\n"+	
    								"|						|\n"+			
    								"|	1.Alta de un nuevo paciente		|\n"+
    								"|	2.Añadir visita				|\n"+
    								"|	3.Borrar por completo un paciente	|\n"+
    								"|	4.Buscar paciente sabiendo apellido1	|\n"+
    								"|	5.Ver lista de pacientes en una fecha	|\n"+
    								"|	6.Salir					|\n"+
    								"|						|\n"+
    								"·················································");
    			//Solicito la opcion elegida por teclado
    			System.out.println("Eliga la opcion: ");
    			opcionElegida=Integer.parseInt(entrada.readLine());
    			
    			switch(opcionElegida){
    			
    				//Opcion 1
    				case 1:
    				Paciente P=new Paciente();
    				System.out.println("Nombre: ");
    				P.nombre=entrada.readLine();
    				System.out.println("Primer Apellido: ");
    				P.apellido1=entrada.readLine();
    				System.out.println("Segund Apellido: ");
    				P.apellido2=entrada.readLine();
    				System.out.println("Edad: ");
    				P.edad=Integer.parseInt(entrada.readLine());
    				System.out.println("Numero de la seguridad social: ");
    				P.ssocial=Integer.parseInt(entrada.readLine());
    				inicializaVisitas(P);
    				altaNuevo(consulta,P);
    					break;
    			
    				//Opcion 2
    				case 2:
    					Visita visitaPreparada=new Visita();
    					System.out.println("Indique el numero de seguridad social del paciente que va a realizar la visita: ");
    					numeroProvisional=Integer.parseInt(entrada.readLine());
    					System.out.println("Dia: ");
    					visitaPreparada.dia=Integer.parseInt(entrada.readLine());
    					System.out.println("Mes: ");
    					visitaPreparada.mes=Integer.parseInt(entrada.readLine());
    					System.out.println("Año: ");
    					visitaPreparada.año=Integer.parseInt(entrada.readLine());
    					System.out.println("Resumen de la visita: ");
    					visitaPreparada.resumen=entrada.readLine();
    					añadeVisita(consulta,numeroProvisional,visitaPreparada);
    					break;
    				
    				//Opcion 3
    				case 3:
    					System.out.println("Indique el numero de seguridad social del paciente que quiere eliminar: ");
    					numeroProvisional=Integer.parseInt(entrada.readLine());
    					borrarPaciente(consulta,numeroProvisional);
    					break;
    				
    				//Opcion 4
    				case 4:
    					
    					break;
    				
    				//Opcion 5
    				case 5:
    					break;
    					
    				//Opcion 6
    				case 6:
    					System.out.println("ADIOS");
    					break;
    					
    			
    				
    			}
    			
    			
    		}while(opcionElegida!=6);
    		
    	
    		
    		
    	}
    
    }
    ---------------
    Hispasat88
    Citar  
     

  3. #3  
    Moderador Global Avatar de hystd
    Fecha de ingreso
    Jul 2005
    Ubicación
    1, 11, 21, 1211...
    Mensajes
    1.596
    Descargas
    58
    Uploads
    0
    Aunque ya lo has solucionado y llego un poco tarde, para la próxima vez, un NullPointerException ocurre cuando se referencia algo que no existe (un puntero nulo), es decir, acceder a un objeto que no ha sido creado... en tu caso estabas intentando acceder a un vector que no habia sido creado. Con el operador new has creado dicho vector y ya si puedes acceder al objeto sin problemas.

    Un saludo
    El optimista tiene ideas, el pesimista... excusas

    Citar  
     

Temas similares

  1. Problema .jar Java
    Por eduk15 en el foro PROGRAMACION DESKTOP
    Respuestas: 8
    Último mensaje: 05-01-2011, 03:23
  2. Problema Graphics Java
    Por eduk15 en el foro PROGRAMACION DESKTOP
    Respuestas: 6
    Último mensaje: 27-07-2010, 13:34
  3. Problema Programacion Java
    Por danielv en el foro GENERAL
    Respuestas: 3
    Último mensaje: 20-02-2009, 22:41
  4. Problema con java en ubuntu 6.10
    Por fideos en el foro LINUX - MAC - OTROS
    Respuestas: 2
    Último mensaje: 29-12-2006, 22:45
  5. Problema en java
    Por fedderico10 en el foro PROGRAMACION DESKTOP
    Respuestas: 2
    Último mensaje: 11-02-2005, 20:25

Marcadores

Marcadores