Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    12

    [JAVA] Errori durante l'esecuzione

    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

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320

    Moderazione

    Per Java esiste il sub-forum apposito.

    Ti sposto.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [JAVA] Errori durante l'esecuzione

    Originariamente inviato da Erika86
    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)
    Il motivo è molto semplice: quando chiami il metodo inserisci(), incrementi numeroLibri ma non inserisci alcun Libro nell'array mieiLibri. Quindi quando vai ad eseguire ricerca(), v[i] (un elemento dell'array mieiLibri che passi) è certamente null, per questo hai l'eccezione.

    Comunque, e giusto come segnalazione/suggerimento, avresti potuto e dovuto scrivere il codice in modo più chiaro, pulito, ben indentato. E avresti anche dovuto migliorarlo dal punto di vista strutturale/concettuale, cioè senza dover passare ogni volta l'array mieiLibri ai metodi e cercando di usare il più possibile l'incapsulamento (in particolare per l'array dei libri).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Utente di HTML.it L'avatar di nether
    Registrato dal
    Dec 2006
    Messaggi
    376
    Exception in thread "main" java.lang.NullPointerException
    at Libreria.ricerca(Libreria.java:233)
    at Libreria.main(Libreria.java:109)
    quali righe sono? contarle una ad una mi riesce un po' scomodo

    p.s. cerca di indentare il codice quando lo posti, altrimenti e' veramente difficile per chi legge darti una mano...

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    12
    Eccomi qui di nuovo chiedo scusa per non aver inserito il codice in modo chiaro cmq mi continua a dare lo stesso errore anche se ho cambiato determinate cose nel codice :master: non capisco dove sia sto errore

    codice:
    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) {
    
    	   				boolean r = inserisci(mieiLibri);
    
    	   				if(r)
    
    	   			   		System.out.println("\n Inserimento avvenuto con successo \n");
    
    	   			    else
    
    	     				System.out.println("\n Elenco pieno, inserimento non possibile! \n");
    
    	  			}
    
    	  			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.
    */
    
    		public static boolean 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();
    
    	       		// v[numeroLibri] = new Libro(t, a, e);
    
    	        	numeroLibri++;
    
    	        	return true;
    		 	}
    
    			else
    
    				return false;
    
    		}
    
    /**
    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());
    
    			}
    
    		}
    
    	} // chiude la classe Libreria


    L'errore è sempre lo stesso ma ora mi da errore la riga 155 che è la seguente:
    codice:
    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;
    
    		}

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320

    Moderazione

    Suggerimento:
    Per inserire il codice in modo che venga visualizzato in modo chiaro (con indentazioni e senza andare a capo sulle linee lunghe) lo devi inserire all'interno dei tag

    [*CODE] e [*/CODE]

    (senza gli asterischi).

    E' sufficiente fare clic sul pulsante (#) quando digiti il testo del tuo messaggio.

    Per questa volta ho modificato io la tua discussione.
    In futuro, cerca di non utilizzare il tasto TAB per le indentazioni o cerca di farlo convertire in 3-4 spazi così risulta ancora più leggibile.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Erika86
    Eccomi qui di nuovo chiedo scusa per non aver inserito il codice in modo chiaro cmq mi continua a dare lo stesso errore anche se ho cambiato determinate cose nel codice :master: non capisco dove sia sto errore
    Questa è la riga che hai messo:

    // v[numeroLibri] = new Libro(t, a, e);

    Ma devi togliere il commento ... insomma, devi creare l'oggetto Libro e assegnarlo all'elemento del vettore.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    12
    grazieeeeeeeeeeeeeeeeeeeeeeeeeeeee smaaaaaack
    grazie tante

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.