Il problema nel secondo (e nel terzo) ciclo for è che tenti di accedere a tutti i 150 oggetti di nodes[], mentre in realtà nel primo ciclo for hai inizializzato solo quelli con indice tra 0 e Np-1.
Siccome Np è determinato a runtime, se Np è più piccolo di 150 ti becchi la NullPointerException quando tenti di accedere a setId() di nodes[Np].

Dovresti modificare la condizione di uscita del secondo e del terzo ciclo for e renderla uguale a quella del primo.

Comunque in Java non è conveniente costruirsi un array grande per poi usarne una parte secondo necessità a runtime: meglio usare le Collection (nel tuo caso, direi ArrayList).