Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    54

    NullPointerException

    Ciao a tutti, sono un nuovo utente appena iscritto nel forum.
    Sono da poco entrato nel mondo di Java e sto iniziando a fare dei programmini per esercitarmi,
    ho già delle conoscenze di c++ e ho già bene in testa il concetto di array e matrici.
    Oggi mi sono ritrovato durante un errore che non riesco bene a chiarire, ho fatto varie ricerche su google e ho scoperto che il NullPointerException è il problema più comune in java.
    Non so proprio più che pesci pigliare non riesco a capire come strutturare il codice, potreste aiutarmi?

    Vi allego il codice


    Main
    codice:
    import javax.swing.JOptionPane;
    
    public class Main {
    
    	public static void main(String[] args) {
    		String esci = "";
    		int n=0;
    		int dimensione=0;
    		JOptionPane.showMessageDialog(null, "Biblioteca");
    		
    		do{
    			String line = "";
    			line = JOptionPane.showInputDialog("Quanti libri vuoi inserire?");
    			try{
    			dimensione=Integer.parseInt(line);
    			if(dimensione<=0&&dimensione>100)  JOptionPane.showMessageDialog(null, "Devi inserire un numero fra 0 e 100");
    			}
    			catch(NumberFormatException ex)
    			{
    				JOptionPane.showMessageDialog(null, "Errore di codifica");
    				return;
    			}
    		}while(dimensione<=0&&dimensione>100);
    		Book libro[]= new Book[dimensione];
    		do{	
    		libro[n].set_isbn(JOptionPane.showInputDialog("Inserisci l'ISBN del " +(n+1)+"° libro" ));	
    		n++;
    		}while(n<dimensione);
    		
    		do{
    		do{
    			
    			String line7=JOptionPane.showInputDialog("Vuoi uscire dal programma?");
    			esci =String.valueOf(line7);
    			if((!esci.equals("si"))&&(!esci.equals("no"))) JOptionPane.showMessageDialog(null,"Inserisci 'si' oppure 'no'!!");
    			
    		
    		}while((!esci.equals("si"))&&(!esci.equals("no")));			
    	}
    	while(!esci.equals("si"));
    	}
    
    }
    Book
    codice:
    public class Book {
    
    	private String _isbn = "";
    
    	public Book(String isbn) {
    		this._isbn=isbn;
    			}
    
    
    
    	public void set_isbn(String _isbn) {
    		this._isbn = _isbn;
    	}
    
    	public String get_isbn() {
    		return _isbn;
    	}
    
    
    }
    Console
    codice:
    Exception in thread "main" java.lang.NullPointerException
    	at Main.main(Main.java:30)  <=== forse ho riformattato il testo quindi vi dico... a quanto ho capito l'errore è alla riga "libro[n].set_isbn(JOptionPane.showInputDialog("Inserisci l'ISBN del " +(n+1)+"° libro" ));"

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328

    Moderazione

    Per il codice si usano i tag CODE, non i tag QUOTE.

    Sistemo il tuo post.

    PS: In futuro un titolo un po' più esplicativo... NullPointerException è un problema che è già stato trattato centinaia di volte.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Comunque, con questa riga:
    codice:
    Book libro[]= new Book[dimensione];
    Dichiari e istanzi un array di libri di dimensione "dimensione"... con tutti gli elementi nulli (quindi non crei nessun libro). Ovviamente, prima di usare l'ennesimo elemento, dovrai istanziarlo (crearlo):

    codice:
    libro[n] = new Book( ... );
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    occhio a quello che fai, devi distinguere bene istanti in cui si verificano certe situazioni

    codice:
    MyObject obj ;
    dichiari una variabile di tipo MyObject (che le prende tutte).
    obj non contiene altro che un riferimento (e prendila con le pinze perché in java non ci sono puntatori e spero mi passiate l'imprecisione), una specie di puntatore ad un'area di memoria che contiene oggetti di tipo MyObject. Fin qui hai solo detto che hai a disposizione un riferimento di un certo tipo, non hai riservato spazi in memoria e/o assegnato valori. obj ha un valore di default che è null.

    quando tu fai

    codice:
    obj = new MyObject();
    materialmente istanzi una variabile di tipo MyObject (cioè appunto riservi lo spazio in memoria) e se tutto va bene obj ha un indirizzo di riferimento.

    Per i vettori la cosa è un po' più complessa

    codice:
    MyObject [] objvec = new MyObject[20];
    stai dicendo che vuoi un array di MyObject e stai riservando in memoria lo spazio per 20 MyObject, ma in questo spazio ancora non hai assegnato valori, per cui hai 20 riferimenti a null.
    Questo è l'errore che tu fai: ogni riferimento interno non lo hai ancora valorizzato opportunamente.
    codice:
    do{	
    libro[n] = new Book(); 
    
    		libro[n].set_isbn(JOptionPane.showInputDialog("Inserisci l'ISBN del " +(n+1)+"° libro" ));	
    		n++;
    		}while(n<dimensione);
    dovrebbe funzionare.

    Visto che sei alle prime armi, lascia stare JOptionPane e usa la riga di comando, non infarcisci il programma di roba che al momento hai poco chiara

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    54
    non ci credo ! era solo questo l'errore? bastava inizializzare l'array..
    che errore stupido XD , cmq grazie dell'aiuto !!

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 © 2025 vBulletin Solutions, Inc. All rights reserved.