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!