Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    347

    [Java] problema eccezione NullPointerException

    allora, vi posto direttamente il codice:
    codice:
    public class Cella{
    	private int val;
    	public Cella(int val){
    		if(val<1 || val>9) throw new IllegalArgumentException();// le celle di un sudoku possono avere valori da 1 a 9
    		this.val=val;
    	}
    	public int getVal(){
    		return val;
    	}
    	public void setVal(int val){
    		if(val<1 || val>9) throw new IllegalArgumentException();
    		this.val=val;
    	}
    	public static void main(String[] args){
    		Cella[] a = new Cella[10];
    		System.out.print(Arrays.toString(a));
    		Cella[][] b= new Cella[9][9];
    		b[3][2].setVal(8);
    	}
    }
    mi da una nullPointerException all'ultima riga del main(b[3][2].setVal(8))... non riesco a capire l'errore...

  2. #2
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    755
    bè è ovvia la cosa!
    tu hai fatto:

    codice:
    Cella[][] b= new Cella[9][9];
    cioè tu hai creato un array di array (o array bidimensionale , o matrice , chiamalo come vuoi) di oggetti "Cella"
    ma a questo punto tu hai che tutti gli oggetti in questa "matrice" sono ancora settati a "null" , non li hai mica inizializzati facendo del tipo:

    codice:
    b [3][2] = new Cella (5);
    e quindi alla ultima riga quando vai a fare:

    codice:
    b[3][2].setVal(8);
    stai tentando di invocare il metodo "setVal" su un oggetto il cui stato è a "null" , e come hai potuto constatare questa azione genera e segnala un NullPointerException"


  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    347
    ma scusa, quando si scrive "new Cella[9][9]" non si istanziano degli oggetti cella nell'array?
    EDIT: e se è come dici tu, impostando un costruttore di default(senza argomenti) vengono istanziati gli oggetti cella o vanno comunque creati? mi ha un po confuso sta cosa XD

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    755
    Originariamente inviato da John360
    ma scusa, quando si scrive "new Cella[9][9]" non si istanziano degli oggetti cella nell'array?
    si e no , facendo in questo modo tu istanzi la matrice di oggetti ma non gli oggetti contenuti , che ancora saranno impostati a null...prova ad esempio a creare un array di String e stamparne le stringhe in esso senza "toccarli":


    codice:
    String [] array = new String [5];
    for (String s : array) {
    System.out.println (s);
    }
    avrai stampata una sfilza di null...

    Originariamente inviato da John360
    EDIT: e se è come dici tu, impostando un costruttore di default(senza argomenti) vengono istanziati gli oggetti cella o vanno comunque creati? mi ha un po confuso sta cosa XD
    non è questione di costruttore con o senza parametri , la questione è che il costruttore non viene proprio richiamato istanziando semplicemente l'array...


    E' un po' come se tu avessi una scatola di penne (di oggetti "Penna") e tu inserisci nella scatola i "riferimenti" (per fare un esempio pratico e comprensibile: il luogo dove la penna in questione si trova , es: sul tavolo) delle penne che vuoi che essa contenga...al momento della creazione della scatola essa avrà la sua dimensione di penne ospitabili che però non fanno riferimento ad alcun luogo dove stanno delle penne (quindi null)...man mano che vuoi aggiungere penne (innanzitutto devono essere reali , devono essere state "create" ) le metti nel contenitore mediante il loro "riferimento"...


  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    347
    ok afferrato! XD Li devo istanziare io punto e basta

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.