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