|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Apr 2004
Messaggi: 364
|
Java strana eccezione
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 Codice:
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);
}
}
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Aug 2001
Città: Torino
Messaggi: 1282
|
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 |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Apr 2004
Messaggi: 364
|
Se faccio come dici tu, quando compilo, viene segnalato un errore di Exception in thread "main" java.lang.StackOverflowError
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Mar 2004
Messaggi: 1455
|
i < 4, non minore o uguale, altrimenti sballi con l'array.
__________________
Ciao ~ZeRO sTrEsS~ |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Apr 2004
Messaggi: 364
|
Non penso proprio che mettere i<=4 sia un errore, l'array è di 5 elementi e da zero a 4 , sono 5 elementi
|
|
|
|
|
|
#6 |
|
Member
Iscritto dal: Apr 2005
Messaggi: 224
|
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. Ultima modifica di Alvaro Vitali : 18-07-2005 alle 11:32. |
|
|
|
|
|
#7 |
|
Member
Iscritto dal: Apr 2005
Messaggi: 224
|
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: Codice:
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;
}
}
Codice:
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);
}
}
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Apr 2004
Messaggi: 364
|
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? |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 01:43.


















