Sto cercando di esercitarmi con la classica classe punto, ma ho un'eccesione, in oggetto indicato, che non riesco a risolvere.

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 problema consiste nel fatto che quando visualizzo l'output:

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