Ciao a tutti domani ho un esame di programmazione e sto impazzendo su un programma che viene compilato esattamente poi quando lo eseguo mi ritrovo il seguente errore quando voglio ricercare un determinato titolo, oppure quando voglio stampare i titoli inseriti (preciso l'inserimento avviene in modo corretto) : :master:

Exception in thread "main" java.lang.NullPointerException
at Libreria.ricerca(Libreria.java:233)
at Libreria.main(Libreria.java:109)



Vi riporto il codice se potete darmi una mano

import java.util.*;

public class Libreria{

static Scanner tastiera = new Scanner(System.in);

//(1) Dichiarare e inizializzare una variabile statica numeroLibri per tener traccia
//del numero di Libri presenti nell'array; numeroLibri deve essere incrementata ogni volta
//che si inserisce un nuovo Libro e indica la prima posizione libera dell'array qui sotto.

public static int numeroLibri = 0;

public static void main(String [] args){

int scelta;

//(2) Dichiarare un array di oggetti Libro, chiamato mieiLibri,
//e inizializzarlo alla lunghezza scelta dall'utente.

int dimensione = UtilLeggiDaTastiera.leggiInteroPositivoDaTastiera( "Lunghezza array");

Libro[] mieiLibri = new Libro[dimensione];

do {
System.out.println(" Menu` di Gestione della mia Libreria");
System.out.println("1) Inserimento nuovo Libro");
System.out.println("2) Ricerca di un Libro");
System.out.println("3) Stampa Informazioni tutti i libri");
System.out.println("4) Esci");
System.out.println("");
System.out.println("Digita il numero dell'operazione desiderata seguito da invio:");

//(3) Mettere un controllo per verificare che l'utente inserisca un intero.

while(!tastiera.hasNextInt()) {

System.out.print("Inserire un intero: ");

tastiera.next();
}

scelta = tastiera.nextInt();
tastiera.nextLine(); // per consumare il "\n" residuo


if (scelta == 1) {
inserisci(mieiLibri);
}

if (scelta == 2) {
System.out.println("Inserisci titolo Libro");

String titolo = tastiera.next();

Libro libro = ricerca(mieiLibri, titolo);

if(libro == null)

System.out.println("Libro non trovato");
else

System.out.println(libro.toString());

}

if (scelta == 3) {

print(mieiLibri);

}

} // fine do
while (scelta !=4);


}//fine main.

/** (4) Definire i metodi statici qui sotto per inserire e cercare un nuovo Libro
in un generico array di Libri. Si definisca inoltre un metodo print per stampare su schermo
i valori dell'array di Libri. Si richiamino i metodi nel main sullo specifico array mieiLibri.*/


/**Il metodo inserisci inserisce, se c'è ancora posto, un nuovo Libro nell'array.
Si ricordi che la prima posizione vuota dell'array è indicata da numeroLibri.
I nuovi libri devono essere inseriti in modo ordinato rispetto al titolo. Per fare questo si
usi il metodo sposta dichiarato successivamente.*/

public static void inserisci(Libro [] v){

if (numeroLibri < v.length) {

System.out.println("Titolo:");
String t = tastiera.nextLine();
System.out.println("Autore:");
String a = tastiera.nextLine();
System.out.println("Edizioni");
int e = tastiera.nextInt();

numeroLibri++;
}

else

System.out.println("Non c'e` piu' spazio!");


}


/** Il metodo ricerca restituisce il primo libro con il titolo uguale alla stringa passata
come parametro, se c'è; restituisce null altrimenti.*/

public static Libro ricerca(Libro [] v, String titolo){

for (int i = 0; i < numeroLibri; i++) {

if (titolo.equals(v[i].getTitolo()))

return v[i];

}

return null;

}



/** Il metodo print stampa su schermo i libri contenuti nell'array */

public static void print(Libro [] v){


for (int i = 0; i < numeroLibri; i++) {

System.out.println(v[i].toString());

}

}

}



Grazie a tutti ciaoooo