Snakethesniper
24-01-2010, 13:31
Ciao a tutti, sto sviluppando un programma in Java, la compilazione va bene ma al momento dell'esecuzione mi segnala un errore NullPointerException.
Il programma è formato da 3 classi :
public abstract class Persona{
String nome,cognome;
int matricola;
//costruttore
public Persona(){
nome="";
cognome="";
matricola=0;
}
//metodi
public void ordina(Persona[] p){
int i;
for(i=0;i<p.length;i++){
if(p[i].matricola<p[i+1].matricola){
Persona d=p[i];
p[i]=p[i+1];
p[i+1]=d;
}
}
}
public String toString(){
return nome + " " + cognome + " " + matricola;
}
}
public class Dirigente extends Persona{
double perc;
public Dirigente(){
super();
perc=0.0;
}
}
public class Impiegato extends Persona{
double tasso;
public Impiegato(){
super();
tasso=0.0;
}
}
Il programma è
import java.lang.*;
import java.io.*;
import java.util.*;
public class Soluzione4{
public static void main(String[] args) throws IOException{
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
Persona[] p = new Persona[10];
String input;
String d = "D";
String c = "I";
int i=0;
while((input=in.readLine()) != null){
StringTokenizer str = new StringTokenizer(input,",");
String token = str.nextToken();
i+=1;
if(token.equals(d)){
Dirigente dir = new Dirigente();
dir.nome = str.nextToken();
dir.cognome = str.nextToken();
dir.matricola = Integer.parseInt(str.nextToken());
dir.perc= Double.parseDouble(str.nextToken());
p[i]=dir;
}
if(token.equals(c)){
Impiegato imp = new Impiegato();
imp.nome = str.nextToken();
imp.cognome = str.nextToken();
imp.matricola = Integer.parseInt(str.nextToken());
imp.tasso= Double.parseDouble(str.nextToken());
p[i]=imp;
}
}
for(Persona per : p){
System.out.println(per.toString());
}
}
}
Il problema mi viene segnalato alla riga System.out.println(per.toString());
Per terminare la sequenza di input inserisco il carattere ^Z (nel cmd di windows), credo sia dovuto a quello ma non capisco come risolverlo.
Il programma è formato da 3 classi :
public abstract class Persona{
String nome,cognome;
int matricola;
//costruttore
public Persona(){
nome="";
cognome="";
matricola=0;
}
//metodi
public void ordina(Persona[] p){
int i;
for(i=0;i<p.length;i++){
if(p[i].matricola<p[i+1].matricola){
Persona d=p[i];
p[i]=p[i+1];
p[i+1]=d;
}
}
}
public String toString(){
return nome + " " + cognome + " " + matricola;
}
}
public class Dirigente extends Persona{
double perc;
public Dirigente(){
super();
perc=0.0;
}
}
public class Impiegato extends Persona{
double tasso;
public Impiegato(){
super();
tasso=0.0;
}
}
Il programma è
import java.lang.*;
import java.io.*;
import java.util.*;
public class Soluzione4{
public static void main(String[] args) throws IOException{
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
Persona[] p = new Persona[10];
String input;
String d = "D";
String c = "I";
int i=0;
while((input=in.readLine()) != null){
StringTokenizer str = new StringTokenizer(input,",");
String token = str.nextToken();
i+=1;
if(token.equals(d)){
Dirigente dir = new Dirigente();
dir.nome = str.nextToken();
dir.cognome = str.nextToken();
dir.matricola = Integer.parseInt(str.nextToken());
dir.perc= Double.parseDouble(str.nextToken());
p[i]=dir;
}
if(token.equals(c)){
Impiegato imp = new Impiegato();
imp.nome = str.nextToken();
imp.cognome = str.nextToken();
imp.matricola = Integer.parseInt(str.nextToken());
imp.tasso= Double.parseDouble(str.nextToken());
p[i]=imp;
}
}
for(Persona per : p){
System.out.println(per.toString());
}
}
}
Il problema mi viene segnalato alla riga System.out.println(per.toString());
Per terminare la sequenza di input inserisco il carattere ^Z (nel cmd di windows), credo sia dovuto a quello ma non capisco come risolverlo.