Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    [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. #2
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    ti sei dimenticato di inizializzare gli oggetti dell'array
    for(int i=0; i<=4; i++) {
    n[i] = new studenti();

  3. #3
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    <previsione>
    ti restituirā un memory error
    </previsione>

  4. #4
    Originariamente inviato da floyd
    ti sei dimenticato di inizializzare gli oggetti dell'array
    for(int i=0; i<=4; i++) {
    n[i] = new studenti();
    Giā prima di poter usare degli oggetti li devi creare...nel tuo caso all'interno del primo for come ha detto floyd.

    Ciao.
    Si puō vincere o perdere, l'importante č vincere o perdere da uomini...

    Neverland - Il mio Forum

  5. #5
    Sono nuovo del java e questa cosa di inizializzare l'array non l'ho ancora capita, perchč dopo aver allocato memoria per l'array, devo anche inizializzare ogni sua posizione?
    Cmq se inizializzo l'array come dite voi
    for(int i=0; i<=4; i++) {
    n[i] = new studenti();

    Viene segnalato un errore StackOverflowException
    Non so proprio come risolvere questo problema

  6. #6
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    io te l'avevo detto
    il costruttore di studenti crea 5 oggetti studenti i quali creano 5 oggetti studenti ognuno
    in altre parole un oggetto istanzia 5 oggetti di se stesso all'infinito

  7. #7
    Come posso risolvere allora questo problema?

  8. #8
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    studiando la logica del programma meglio
    un suggerimento, perchč studenti deve estendere dati e perchč creare una classe che racchiuda 5 entitā, al posto di una classe che identifica un oggetto e 5 riferimenti a questa classe messi in quella del frame

  9. #9
    Che ne dici di questa rivisitazione?
    (ci siamo giā visti da qualche parte noi due.. )

    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);
    
        }
    
    }

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.