Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2016
    Messaggi
    17

    problema con array di oggetti

    salve,
    espongo il mio problema..creando un programma per la gestione di una biblioteca ho creato un array d'oggetti contenete titolo,autore e genere del libro:
    codice:
    public class libris {    public String autore;
        public String titolo;
        public String genere;
    }
    nella funzione dove l'utente può aggiungere un libro ovvero questa:
    codice:
    void addbook(){
            int i=0;
            while(l[i]==null){
                Scanner in=new Scanner(System.in);
                System.out.println("type the name of the autor's book:\n");
                l[i].autore=in.nextLine();
                System.out.println("type the name of the book:\n");
                l[i].titolo=in.nextLine();
                System.out.println("type the genre's book:\n");
                l[i].autore=in.nextLine();
                i++;
            }
        }
    continua a darmi questo errore:
    ""Exception in thread "main" java.lang.NullPointerException""
    qualcuno potrebbe darmi una mano?

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da matteo9 Visualizza il messaggio
    continua a darmi questo errore:
    ""Exception in thread "main" java.lang.NullPointerException""
    Devi istanziare l'oggetto libris, da assegnare a l[i] chiaramente PRIMA di accedere a l[i].qualcosa
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2016
    Messaggi
    17
    già fatto ma niente stesso problema

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2014
    residenza
    Padova
    Messaggi
    361
    Prova a postare tutto il codice incriminato, ma l'eccezione è facile da risolvere, devi assicurarti di aver istanziato sia il vettore l, sia ogni singolo elemento al'interno ...

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2016
    Messaggi
    17
    questi sono gli oggetti di libris:
    codice:
    public class libris {    private String autore;
        private String titolo;
        private String genere;
        private double prezzo;
        private int copie;
        
        public libris(String autore,String titolo,String genere,double prezzo,int copie){
     this.autore = autore;
     this.titolo = titolo;
     this.genere=genere;
     this.prezzo=prezzo;
     this.copie=copie;
        } 
       
     public String getautore() {
     return autore; }
    
    
     public String gettitolo() {
     return titolo; }
     
     public String getgenere() {
     return genere; }
    
    
     public double getprice() {
     return prezzo; }
     
     public int getcopie(){
         return copie;
     }
     
    }
    questi i metodi :
    codice:
    public class libro {
        public libris l[]=new libris[1000];
       
      public void start()
    {
     for(int i=0;i<1000;i++){
    l[i]=null;
    }
       
       
       public void pres(){
            System.out.println("+-------------------------------+");
            System.out.println("SOFTWARE DI GESTIONE PER LIBRERIE");
            System.out.println("+-------------------------------+");
            System.out.println("@COPYRIGHT BY PETRUZZI MATTEO & FALCO FEDERICO");
        }
        
        public void addlibro (){
            for(int i=0;i<1000;i++){
                
             String nome,autore,genere;   
            double prezzo;
            int copie=1;
            
            Scanner in=new Scanner(System.in);
            System.out.println("type the name's book: \n");
            nome=in.nextLine();
            System.out.println("type the autor's book: \n");
            autore=in.nextLine();
            System.out.println("type the genre's book: \n");
            genere=in.nextLine();
            System.out.println("type the price of the book: \n");
            prezzo=in.nextDouble();
           
            if((l[i].getautore().equals(autore))&&(l[i].getgenere().equals(genere))&&(l[i].gettitolo().equals(nome)))
            {
             copie=l[i].getcopie()+copie;    
             l[i]=new libris(nome,autore,genere,prezzo,copie);
            }
            else{
            l[i]=new libris(nome,autore,genere,prezzo,copie);
            }
            }
        }
        
        
       
      
        void search(){
            Scanner in=new Scanner(System.in);
          System.out.println("type the name's book: \n");
          String nome=in.nextLine();
          for(int i=0;i<1000;i++){
             if(l[i].gettitolo()==nome){
               System.out.println("name's book: "+l[i].gettitolo()+"\n");  
               System.out.println("autor's book: "+l[i].getautore()+"\n"); 
               System.out.println("genre's book: "+l[i].getgenere()+"\n"); 
               System.out.println("price's book: "+l[i].getprice()+"\n"); 
               System.out.println("price's book: "+l[i].getprice()+"\n"); 
             } 
          }        
        }
        
        void rmvbook(){
            String autore,genere;  
            double prezzo;
            Scanner in=new Scanner(System.in);
          System.out.println("type the name's book: \n");
          String nome=in.nextLine();
            System.out.println("type the autor's book: \n");
            autore=in.nextLine();
            System.out.println("type the genre's book: \n");
            genere=in.nextLine();
            System.out.println("type the price of the book: \n");
            prezzo=in.nextDouble();
          int copie=1;
          for(int i=0;i<1000;i++){
             if((l[i].gettitolo()==nome)&&(l[i].getcopie()!=1)&&(l[i].getautore()==autore)){
               copie=l[i].getcopie()-copie;    
             l[i]=new libris(nome,autore,genere,prezzo,copie);
             } 
             if((l[i].gettitolo()==nome)&&(l[i].getcopie()==1)&&(l[i].getautore()==autore)){
                 l[i]=null;
             }
          }        
        }

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,327
    Non si capisce in quale ordine vengano richiamati quei metodi, quindi vado ad intuito.
    Per prima cosa verrà richiamato il metodo start()... il quale pone a null tutti gli elementi dell'array.
    Poi verrà richiamato addlibro(). E questo legge dall'utente i dati e poi fa questa cosa qua:

    codice:
    if((l[i].getautore().equals(autore))&&(l[i].getgenere().equals(genere))&&(l[i].gettitolo().equals(nome)))

    Peccato che l[i] sia null, quindi non ci puoi invocare proprio nulla (getautore(), getgenere(), gettitolo(), ecc NON li puoi invocare se l'oggetto è nullo)... e ti solleverà una bella NullPointerException. Tra l'altro vai a istanziare l'oggetto nell'else... il che non ha nessun senso: PRIMA si deve istanziare l'oggetto, e solo DOPO ci puoi invocare sopra dei metodi.


    Devi rivedere la logica di funzionamento.


    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
    Io aggiungo che .....

    - il codice è parecchio confuso.
    - oltretutto "mescola" la logica di gestione dell'insieme di libri (quell'array) con la gestione della interazione verso l'utente.
    - cose come if(l[i].gettitolo()==nome) sono comunque inappropriate e segno che bisogna approfondire di più i concetti sull'uso e comparazione degli oggetti (stringhe comprese).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.