PDA

View Full Version : Java strana eccezione


GiulioCesare
17-07-2005, 21:11
Salve ragazzi ho un problema con un piccolo programma, che eredita una classe e deve memorizzare delle informazioni tramite input, ma vengono segnalati degli errori in esecuzione, appena dopo inserisco il primo nome, l'errore è questo

Exception in thread "main" java.lang.NullPointerException
at studenti.<init>(studenti.java:24)
at studenti.main(studenti.java:42)

E questo è il codice, grazie a chi vorrà aiutarmi :)



import javax.swing.*;
import java.util.*;

class dati
{
public String nome="";
public String cognome="";
public int eta=0;
}

public class studenti extends dati
{
public studenti [] n = new studenti [5];

studenti()
{
for(int i=0; i<=4; i++)
{
String t = JOptionPane.showInputDialog("Inserire nome");
n[i].nome = t;
String z = JOptionPane.showInputDialog("Inserire cognome");
n[i].cognome = z;
String y = JOptionPane.showInputDialog("Inserire età");
n[i].eta = Integer.parseInt(y);
}
}

public void mostra()
{
for(int i=0; i<=4; i++)
{
System.out.println (n[i].nome);
System.out.println (n[i].cognome);
System.out.println (n[i].eta);

}
}

public static void main(String [] args)
{

studenti a = new studenti();
a.mostra();
System.exit(0);

}

}

youthgonewild
18-07-2005, 01:07
Non va bene la creazione dell'array perchè non punta a nessun oggetto..la prima cosa che mi viene in mente è questa:

import javax.swing.*;
import java.util.*;

class dati
{
public String nome;
public String cognome;
public int eta;

public dati() //un costruttore per la classi dati
{
nome = "";
cognome = "";
eta = 0;
}
}

public class studenti extends dati
{
private dati [] n = new dati[5];

public studenti()
{
for(int i=0; i<=4; i++)
{
n[i] = new dati(); //dopo aver creato l'array devi inizializzare ciascuna sua "cella"

etc..il resto del codice può andare bene

GiulioCesare
18-07-2005, 09:40
Se faccio come dici tu, quando compilo, viene segnalato un errore di Exception in thread "main" java.lang.StackOverflowError

:(

beppegrillo
18-07-2005, 10:01
i < 4, non minore o uguale, altrimenti sballi con l'array.

GiulioCesare
18-07-2005, 10:13
Non penso proprio che mettere i<=4 sia un errore, l'array è di 5 elementi e da zero a 4 , sono 5 elementi :D

Alvaro Vitali
18-07-2005, 10:30
Ma perchè utilizzi un costrutto di estensione? Non mi pare azzeccato per il modello che vuoi realizzare, io ci vedrei più un'aggregazione:

public class studenti dati
{
public dati[] n = new dati[5];

etc.. etc..


P.S. ovviamnte è solo una mia opinione.

Alvaro Vitali
18-07-2005, 10:47
Il problema è che quando definisci l'array questo conterrà riferimenti "null" e non gli oggetti costruiti col costruttore di default, perciò non puoi accedere a riferimento.nome, perchè riferimento è null!

Questa mia versione funziona, vedi se ti piace:


class Dati
{
public String nome="";
public String cognome="";
public int eta=0;


public Dati(String n, String c, int e) {

nome=n;
cognome=c;
eta=e;
}


}




import javax.swing.JOptionPane;

public class Studenti
{
public Dati[] n = new Dati[5];

Studenti()
{
for(int i=0; i<=4; i++)
{

String t = JOptionPane.showInputDialog("Inserire nome");
String nome = t;
String z = JOptionPane.showInputDialog("Inserire cognome");
String cognome = z;
String y = JOptionPane.showInputDialog("Inserire età");
int eta = Integer.parseInt(y);
n[i] = new Dati(nome, cognome, eta);


}
}

public void mostra()
{
for(int i=0; i<=4; i++)
{
System.out.println (n[i].nome);
System.out.println (n[i].cognome);
System.out.println (n[i].eta);

}
}

public static void main(String [] args)
{

Studenti a = new Studenti();
a.mostra();
System.exit(0);

}

}

GiulioCesare
18-07-2005, 14:57
Ti ringrazio molto, ora così funziona, ma un dubbio mi rimane perchè quando inizializzavo ogni singolo oggetto con un :
for(int i=0; i<=4; i++) studenti [] n = new studenti();
mi dava un errore di stackoverflow?