Sto cercando di esercitarmi con la classica classe punto, ma ho un'eccesione, in oggetto indicato, che non riesco a risolvere.
Il problema consiste nel fatto che quando visualizzo l'output:codice:public class NodeTest { public static void main(String argv[]) { //inerisce nell'array Nodes tre oggetti Node Node[] nodes = new Node[150]; double d; //distanza double r; //raggio int l = 350; //Lunghezza Area int a = 500; //Altezza Area double Nd; //numeri di nodi generati da una sequqnza casuale Integer i; //buffer int k,q; //indice boolean flag = true; NumberFormat formattatore = NumberFormat.getNumberInstance(); // cultura predefinita formattatore.setMaximumFractionDigits(2); // max due cifre decimali dopo la virgola [...] //posiziona i nodi nel piano in modo casuale for(k=0;k<Np;k++){ nodes[k]= new Node(Math.random()*(a-30)+15, Math.random()*(l-30)+15); }//for k //stampa l'informazione su tutti gli oggetti Employee for(k = 0; k < nodes.length; k++){ Node e = nodes[k]; e.setId(); r = e.getR(); //e.setR(-2); //double r2 = e.getR(); d = e.getD(nodes[0].getX(), nodes[0].getY()); // imposto il formattatore con le specifiche desiderate System.out.println("id="+formattatore.format(e.getId()) + "\t (" + formattatore.format(e.getX()) + ";" + formattatore.format(e.getY()) + ") \t raggio=" + formattatore.format(r) + " \t d = " + formattatore.format(d)); nodes[k] = e; }//for k //verifica copia NON VIENE VISUALIZZATA for(k = 0; k < nodes.length; k++){ // imposto il formattatore con le specifiche desiderate System.out.println("***DEBUG nodes["+formattatore.format(nodes[k].getId()) + "]\t (" + formattatore.format(nodes[k].getX()) + ";" + formattatore.format(nodes[k].getY()) + ") \t raggio=" + formattatore.format(nodes[k].getR()) + " \t d = " + formattatore.format( nodes[k].getD( nodes[0].getX(), nodes[0].getY() ) ) ); }//for k [...] }//main }//NodeTest class Node{ /** costruottore per la classe Node @param a ascissa di tipo double @param b coordinata di tipo double @return istanza oggetto di tipo Node */ public Node(double a, double b){ x = a; y = b; id = 0; r = 10.0+100.0*Math.random(); v = null; }//Node /** costruottore per la classe Node @param a ascissa di tipo double @param b coordinata di tipo double @param c codice identificativo di tipo intero @param d raggio di azione; @return istanza oggetto di tipo Node */ public Node(double a, double b, int c, double d){ x = a; y = b; id = c; r = d; }//Node /** @return l'ascissa di tipo double */ public double getX(){ return x; }//getX /** @return l'ordinata di tipo double */ public double getY(){ return y; }//getY /** @return il codice identificativo del nodo */ public double getId(){ return id; }//getId /** determina il codice identificativo di un nuovo nodo */ public void setId(){ id = nextId; nextId++; }//setId /** @return il codice identificativo di un nuovo nodo */ public static int getNextId(){ return nextId; }//getNextId /** @return il raggio d'azione del nodo */ public double getR(){ return r; }//getR /** modifica il raggio di azione del nodo */ public void setR(double dd){ double d = dd; r += d; }//setR /** distanza tra il nodo corrente ed in nodo in ingresso @param d1 l'ascissa di tipo double @param d2 l'ordinata di tipo double @return la distanza tra due nodi */ public double getD(double d1,double d2){ double dw; dw=Math.pow(Math.pow(x-d1,2.0)+Math.pow(y-d2,2.0),0.5); return dw; }//d /** inserisce un vicino ovvero un nodo raggiunto */ public void setV(Node a){ v.add(a); //inserisce un oggetto nella lista }//setV /** restituisce la lista dei vicini ovvero dei nodi raggiunti */ public Node[] getV(Node a){ Node[] N = (Node[])v.toArray(new Node[0]); return N; }//getV /** verifica se due nodi sono uguali @param o un oggetto @return true se uguali */ public boolean equals(Object o){ if (o instanceof Node){ Node p = (Node)o; if (p.getX() == x && p.getY()==y) return true; }//if return false; } //vaiabili di classe private double x; //ascissa private double y; //coordinata private int id; //codice identificativo private static int nextId = 1; //codice identificativo successivo private double r ; //raggio d'azione Vector v = new Vector(); //istanzia una lista di oggetti }//Node
il programma si comporta come se non uscisse dal primo for k, infatti mi NON mi visualizza il ciclo di debug. In particolar modo l'istruzione a riga 68 risulta essere la seguente: e.setId();codice:Area MAX: altezza=500; lunghezza=350 id=1 (191,88;38,32) raggio=61,88 d = 0 id=2 (19,81;277,64) raggio=78,64 d = 294,76 id=3 (268,16;211,26) raggio=42,61 d = 189,02 java.lang.NullPointerException at NodeTest.main(NodeTest.java:68)

Rispondi quotando