Salve a tutti. Devo implementare una classe Palestra con la relativa classe collaudo dove devo inserire per forza in questa classe i dati collaudo (dati dal docente).
Il codice mi da il seguente errore:
codice:
Exception in thread "main" java.lang.NullPointerException
at Operazioni.showTab(Operazioni.java:52)
at Test.main(Test.java:52)
Questa è la classe dei costruttori:
codice:
public class Iscritti {
/**
* COSTRUTTORI
*/
public Iscritti(String cognome, String nome, String data, String tipo)
{
this.cognome=cognome;
this.nome=nome;
this.data=data;
this.tipo=tipo;
}
public String getName()
{
return nome;
}
public String getSur()
{
return cognome;
}
public String getDate()
{
return data;
}
public String getType()
{
return tipo;
}
//campi esemplare
private String nome;
private String cognome;
private String data;
private String tipo;
}
Questa è la classe dei metodi:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
public class Operazioni {
Scanner in = new Scanner(System.in);
//DATI INPUT
public Iscritti[] datiInput()
{
System.out.println("QUANTI ISCRITTI VUOI INSERIRE?");
int num = in.nextInt();
Iscritti[] iscritti = new Iscritti[num];
for(int i=0;i<iscritti.length;i++)
{
System.out.println("Cognome iscritto "+(i+1)+": ");
String cognome = in.next();
System.out.println("Nome iscritto "+(i+1)+": ");
String nome = in.next();
System.out.println("Data iscrizione iscritto "+(i+1)+": ");
String data = in.next();
System.out.println("tipo abbonamento iscritto "+(i+1)+": ");
String tipo = in.next();
iscritti[i]= new Iscritti(cognome,nome,data,tipo);
}
return(iscritti);
}
//Visualizzazione array in forma tabellare
public void showTab(Iscritti[]v)
{
String divider = "___________________________________________________";
String title1 = "COGNOME";
String title2 = "NOME";
String title3 = "DATA";
String title4 = "TIPO";
System.out.printf("%-15s %-15s %-15s %-15s %n", title1, title2, title3, title4);
System.out.println(divider);
System.out.println("");
for(int i=0;i<v.length;i++)
{
String name = v[i].getName();
String surname = v[i].getSur();
String date= v[i].getDate();
String type= v[i].getDate();
System.out.printf("%-15s %-15s %-15s %-15s %n", surname, name, date, type);
}
System.out.println(divider);
System.out.println("");
}
//ORDINAMENTO ARRAY IN BASE AL COGNOME
//(insertion sort)
public void ordSur(Iscritti[]v)
{
Iscritti temp;
for(int i=1;i<v.length;i++)
{
for(int j=i;j>0;j--)
{
if((v[j].getSur()).compareToIgnoreCase(v[j-1].getSur())<0)
{
temp = v[j];
v[j]=v[j-1];
v[j-1]=temp;
}
}
}
}
//TRASFORMO LA STRINGA CORRISPONDENTE ALLA DATA IN UNA DATA VERA
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);
}
//ABBONAMENTO CHE SCADE PER PRIMO
public void scadenza(Iscritti[] v)
{
//array di date
Date[] array = new Date[v.length];
for(int i=0;i<array.length;i++)
{
array[i]=Operazioni.trasf(v[i].getDate());
}
//contiene i dati del minimo
Iscritti min= v[0];
Date temp= array[0];
for(int i=1;i<v.length;i++)
{
if((array[i]).compareTo(temp)<0)
{
min = v[i];
temp = array[i];
}
}
System.out.println(min.getSur()+", "+min.getName()+", "
+min.getDate()+", "+min.getType());
}
//CALCOLO PERCENTUALE DIVERSI TIPI ABBONAMENTO
public void percAbb(Iscritti[]v)
{
int contA=0;
int contB=0;
int contC=0;
for(int i=0;i<v.length;i++)
{
if((v[i].getType()).equalsIgnoreCase("A"))
{
contA++;
}
if((v[i].getType()).equalsIgnoreCase("B"))
{
contB++;
}
if((v[i].getType()).equalsIgnoreCase("C"))
{
contC++;
}
}
int somma = contA+contB+contC;
int percA = (100/somma)*contA;
int percB = (100/somma)*contB;
int percC = (100/somma)*contC;
System.out.println("Percentuale abb.A: "+percA+"%");
System.out.println("Percentuale abb.B: "+percB+"%");
System.out.println("Percentuale abb.C: "+percC+"%");
}
}
E questa è la classe collaudo:
import java.util.Scanner;
public class Test {
public static Iscritti[] datiCollaudo()
{
Iscritti[] v = new Iscritti[5];
v[0]= new Iscritti("Panucci", "Luigi", "15/10/2012", "A");
v[1]= new Iscritti("Biffi", "Andrea", "22/11/2012", "B");
v[2]= new Iscritti("Ambruoso", "Ugo", "18/12/2012", "C");
v[3]= new Iscritti("Diana", "Elena", "04/01/2013", "C");
v[4]= new Iscritti("Giacchi", "Maria", "07/01/2013", "B");
return (v);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in = new Scanner(System.in);
int scelta;
Iscritti[] iscritti = null;
Operazioni temp;
do{
System.out.println("Scegli un'operazione: "
+"\n1.Popolamento con dati da tastiera"
+"\n2.Popolamento con dati di collaudo"
+"\n3.Visualizzazione array in forma tabellare"
+"\n4.Ordinamento dell'array per cognome"
+"\n5.Abbonamento che scade per primo"
+"\n6.Percentuale diversi tipi abbonamento"
+"\n7.Termina programma.");
scelta = in.nextInt();
switch(scelta)
{
case 1:
temp=new Operazioni();
iscritti=temp.datiInput();
break;
case 2:
temp = new Operazioni();
datiCollaudo();
break;
case 3:
temp = new Operazioni();
temp.showTab(iscritti);
break;
case 4:
temp = new Operazioni();
temp.ordSur(iscritti);
break;
case 5:
temp = new Operazioni();
temp.scadenza(iscritti);
break;
case 6:
temp = new Operazioni();
temp.percAbb(iscritti);
}
}while(scelta!=7);
System.out.println("Programma terminato!");
}
}
Vi ringrazio in anticipo