Salve a tutti. Devo implementare una classe ambulatorio.
L'oggetto di tipo ambulatorio ha i soliti attributi: cognome, nome, comune di residenza, data di nascita, genere (M o F). Ma ha anche l'attributo categoria d'esenzione che è da calcolare: E1 se il paziente ha più di 65 anni, E2 se il paziente è donna e ha un'età compresa tra i 60 e i 65, E3 se ha meno di 18 anni e un campo vuoto in alternativa.

Io ho provato in questo modo, ma mi da il seguente errore:

Exception in thread "main" java.lang.NullPointerException
at Ambulatorio.esenzione(Ambulatorio.java:30)
at Ambulatorio_tester.main(Ambulatorio_tester.java:45 )
Questa è la classe dei costruttori:
codice:
public class Ambulatorio1 {

	//COSTRUTTORE
	public Ambulatorio1(String cognome, String nome, String comune,
			String data, String genere, String cat)
	{
		sur=cognome;
		name=nome;
		com=comune;
		date=data;
		gen=genere;
		es=cat;
	}
	
	public String getSur()
	{
		return sur;
	}
	
	public String getName()
	{
		return name;
	}
	public String getCom()
	{
		return com;
	}
	public String getDate()
	{
		return date;
	}
	public String getEs()
	{
		return es;
	}
	public String getGen()
	{
		return gen;
	}
	
	
	
	
	
	
//Campi esemplare
	private String sur;
	private String name;
	private String com;
	private String date;
	private String gen;
	private String es;

}
La classe dei metodi:

codice:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;


public class Ambulatorio {

	//trasformo stringhe in date
	private static Date trasf(String data)
	{
		Date data1 = null;
		try{
			SimpleDateFormat sdf= new SimpleDateFormat("dd/MM/yyyy");
			data1 = sdf.parse(data);
	
		}catch(ParseException ex){ex.printStackTrace();}
		
		return (data1);
	}
	
	
	//categoria d'esenzione
	public String esenzione(Ambulatorio1 ogg)
	{
		String esenz = null;
		//fornendo un oggetto di tipo ambulatorio
		//calcola la categoria d'esenzione
		
		String today = "09/02/2013";
		String born = ogg.getDate();
		
		String todayYear = today.substring(6, 9);
		String bornYear = born.substring(6, 9);
		
		int oggi = Integer.parseInt(todayYear);
		int nascita = Integer.parseInt(bornYear);
		
		
		//differenza tra la data di oggi e la data di nascita
		if(oggi - nascita>65)
		{
			esenz = "E1";
		}
		
		else if(oggi - nascita<18)
		{
			esenz = "E3";
		}
		
		else if(oggi - nascita>=60 && oggi - nascita<=65)
		{
			if(ogg.getGen().equalsIgnoreCase("F"))
			{
				esenz = "E2";
			}
		}
		else esenz = "";
		
		return(esenz);
	}
	
	//stampa tabellare
	public void showTab(Ambulatorio1[]v)
	{
		String divider = "______________________________" +
				"___________________________________________________________";
		String tit1 = "COGNOME";
		String tit2 = "NOME";
		String tit3 = "COMUNE";
		String tit4 = "DATA NASCITA";
		String tit5 = "GENERE";
		String tit6 = "CAT.ESENZIONE";
		
		System.out.println("");
		System.out.printf("%-15s %-15s %-15s %-15s %-15s %-15s %n",
				tit1,tit2,tit3,tit4,tit5,tit6);
		System.out.println(divider);
		for(int i=0;i<v.length;i++)
		{
			String nome = v[i].getName();
			String cogn = v[i].getSur();
			String com = v[i].getCom();
			String data = v[i].getDate();
			String gen = v[i].getGen();
			String es = v[i].getEs();
			
			System.out.printf("%-15s %-15s %-15s %-15s %-15s %-15s %n",
					cogn,nome,com,data,gen,es);	
		
		}
		System.out.println(divider);
		System.out.println("");
	
	}
	
	//STAMPA NORMALE
	public void stampa(Ambulatorio1[]v)
	{
		for(int i=0;i<v.length;i++)
		{
			System.out.println(v[i].getSur()+", "+v[i].getName()+", "+v[i].getCom()
					+", "+v[i].getDate()+", "+v[i].getGen()+", "+v[i].getEs());
		}
	}
	
	
	//paziente più anziano
	public void piuAnz(Ambulatorio1[]v)
	{
		Date[] c = new Date[v.length];
		//array di date
		for(int i=0;i<v.length;i++)
		{
			c[i]= Ambulatorio.trasf(v[i].getDate());
		}
		
		Date min = c[0];
		Ambulatorio1 anz = v[0];
		for(int i=1;i<c.length;i++)
		{
			if(c[i].compareTo(min)<0)
			{
				min = c[i];
				anz =v[i];
			}
		}
		System.out.println("Paziente più anziano: "+anz.getName()
				+", "+anz.getSur());
		
	}
	
	//Pazienti residenti in un comune il cui nome contenga il 
	//carattere 'a'
	public void carA(String comune, Ambulatorio1[]v)
	{
		for(int i=0;i<v.length;i++)
		{
			if((v[i].getCom()).equalsIgnoreCase(comune))
			{
				for(int j=0;j<(v[i].getName()).length();j++)
				{
					if((v[i].getName()).charAt(j)=='a')
					{
						System.out.println(v[i].getSur()+", "+v[i].getName()+", "+v[i].getCom()
								+", "+v[i].getDate()+", "+v[i].getGen()+", "+v[i].getEs());
					}
				}
			}
		}
		
	}
	
	

}
La classe di collaudo:

codice:
import java.util.Scanner;


public class Ambulatorio_tester {

	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		Scanner in = new Scanner(System.in);
		int scelta;
		Ambulatorio1[] pazienti = null;
		Ambulatorio temp;
		
		do
		{
			System.out.println("Scegli tra le seguenti operazioni:"
					+"\n1.Popolamento array da input"
					+"\n2.Stampa tabellare"
					+"\n3.Dati del paziente il cui nome contiene il carattere 'a'"
					+"\n4.Paziente più anziano"
					+"\n5.Termina programma");
			
		scelta = in.nextInt();
		
		switch(scelta)
		{
		case 1:
			temp = new Ambulatorio();
			System.out.println("QUANTI PAZIENTI VUOI INSERIRE?");
			int num = in.nextInt();
			pazienti = new Ambulatorio1[num];
			for(int i=0;i<pazienti.length;i++){
				System.out.println("Cognome paziente "+(i+1)+": ");
				String cogn = in.next();
				System.out.println("Nome paziente "+(i+1)+": ");
				String nome = in.next();
				System.out.println("Comune paziente "+(i+1)+": ");
				String comune = in.next();
				System.out.println("Data nascita paziente "+(i+1)+": ");
				String data = in.next();
				System.out.println("Genere paziente "+(i+1)+"(M/F): ");
				String gen = in.next();
				System.out.println("Cat.esenz paziente "+(i+1)+": ");
				String es = temp.esenzione(pazienti[i]);
				
				pazienti[i] = new Ambulatorio1(cogn,nome,comune,data,gen,es);
			}
		temp.stampa(pazienti);
		System.out.println("");
		break;
		
		case 2:
			System.out.println("STAMPA TABELLARE");
			temp = new Ambulatorio();
			temp.showTab(pazienti);
			System.out.println("");
			break;
			
		case 3:
			System.out.println("Dati del paziente il cui nome contiene il carattere 'a'");
			System.out.println("Comune in cui cercare: ");
			String comune = in.next();
			temp = new Ambulatorio();
			temp.carA("Triggiano", pazienti);
			System.out.println("");
			break;
			
		case 4:
			System.out.println("PAZIENTE PIU ANZIANO");
			temp = new Ambulatorio();
			temp.piuAnz(pazienti);
			System.out.println("");
		
		}
			
		}while(scelta!=5);
		System.out.println("Programma terminato!");
		
		
	

	}

}


Grazie anticipatamente!