D'ora in avanti, per postare il codice, utilizza gli appositi tag CODE presenti nella barra degli strumenti che trovi nell'editor dei post: rende il codice più leggibile e facile da comprendere per chi cerca di supportarti (oltre ad essere previsto dal regolamento).
Ti segnalo un errore sul metodo che hai postato. Subito dopo la condizione dell'if c'è un punto e virgola che non ci deve essere: se lo lasci è come se il codice successivo non venisse condizionato, cosa che è evidentemente sbagliata.
Per il resto, mi pare che sia corretto (salvo capire se il problema ti richiede di ritornare l'istanza del punto più vicino presente nell'array "v", oppure, come hai fatto tu, una nuova istanza del punto in cui setti le stesse coordinate).
In merito alla questione principale, l'errore è esattamente lo stesso evidenziato nella discussione a cui ti sei accodato.
L'istruzione:
codice:
Punto[] p = new Punto[4];
istanzia un nuovo array di lunghezza 4, che Java inizializza per default con 4 elementi "null". Quindi, eseguire subito dopo:
è esattamente come dire:
che evidentemente ti provoca una NullPointerException.
Per risolvere: per ogni elemento dell'array devi istanziare un nuovo oggetto e poi puoi inizializzare le sue coordinate (di seguito lo scrivo solo per il primo):
codice:
p[0] = new Punto();
p[0].x = 3.0;
p[0].y = 2.0;
. . .
Occhio, inoltre, che la tua classe si chiama "Esercizio04_Punto", non solo "Punto".