Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di el92
    Registrato dal
    Dec 2014
    Messaggi
    177

    [java]errore NullPointerException

    ciao devo costruire una classe NumBinario cha permette di rappresentare numeri binari su cui sono definite le operazione di AND bit a bit e la conversione in base 10.

    codice:
     class NumBinario{
      String numero;
      int numero1;
    
      String g="";
      /** * un costruttore che costruisce un'istanza di NumeroBinario di 
          cui viene specificata una stringa di zeri e uni (ad esempio, 
          la stringa "0010101")
          * un costruttore che costruisce un'istanza di NumeroBinario di 
          cui viene specificato un numero intero composto di zeri e uni 
          (ad esempio, il numero 101)*/
     NumBinario(String numero){
         this.numero=numero;
     }     
    NumBinario(int numero1){
         this.numero1=numero1;
     }
     /**e` un metodo statico che restituisce true se la stringa s  e`
        composta di soli zeri e uni, false altrimenti;
    
            Ad esempio, se s e' la stringa  "00010" il metodo restituisce true,
            se s e' la stringa "001200" restituisce false.
    
    */
     static boolean isBinary(String s) {
            return s.matches("[0-1]+"); 
    }
    
    /**String and(NumeroBinario nb)
         restituisce il numero binario ottenuto facendo l'operazione
        AND descritta sopra fra il numero binario che esegue il metodo e 
            il numero nb passato come argomento. */
            public NumBinario and(NumBinario nb){
                
                int lunghezza1=numero.length();
                int lunghezza2=nb.numero.length();
                
                    if(lunghezza1<lunghezza2){
                        g=nb.numero.substring(0,lunghezza1);
                    }
                
                int a = Integer.parseInt(g, 2);
                int b = Integer.parseInt(numero, 2);
                int z=a*b;
                nb.numero=Integer.toBinaryString(z);
                numero=nb.numero;
                NumBinario n=new NumBinario(numero);
                return n;
            }
            /**fa la conversione da binario a intero del numero che esegue il metodo
            e restituisce l'intero in base 10 corrispondente;*/
            public int toDecimal(){
             int a = Integer.parseInt(numero,2);
             return a;
         }
        
               public String toString(){
            NumBinario n=new NumBinario(numero);
             String s="";
             s+=n.numero;
             return s;
     }
    
    }
    È tutto un pò contorto però sembrerebbe che viene;adesso il problema sta nel main:

    codice:
    import java.util.*;
    import java.io.*;
    import java.io.BufferedReader;
    class ProvaNumeriBinari{
    public static void main(String args[]) throws IOException{
    InputStreamReader reader =new InputStreamReader(System.in);
    BufferedReader myInput =new BufferedReader(reader);
     String f=myInput.readLine();
    /**e per ogni riga:
    
      - controlla se rappresenta un numero binario
      - se rappresenta un numero binario
        * crea l'oggetto NumeroBinario
        * ne calcola la rappresentazione in base 10
        * calcola l'AND tra il numero stesso e il numero 101011.
      - se non rappresenta un numero binario
        * stampa il messaggio "non binario"
    */
    while(!f.equals("no")){
    f=myInput.readLine();
    NumBinario n=new NumBinario(f);
    if(n.isBinary(f)){
        NumBinario n1=new NumBinario(101011);
        System.out.println(n.toDecimal());
        NumBinario n2=n.and(n1);
        System.out.println(n.toString());
        
    }else
        System.out.println("non è un numero binario");
    
    }
    
    
     myInput.close();
    }
    
    }
    Mi dice che c'è un errore di NullPointerException...perchè?

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Ti dice anche dove si verifica, potresti riportare lo stack trace completo?
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    Utente di HTML.it L'avatar di el92
    Registrato dal
    Dec 2014
    Messaggi
    177
    codice:
    Exception in thread "main" java.lang.NullPointerException
        at NumBinario.and(NumBinario.java:102)
        at ProvaNumeriBinari1.main(ProvaNumeriBinari1.java:25)
    Dice che l'errore è nell metodo and...ma perchè?

  4. #4
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Se conoscere il codice si fa fatica a dirtelo

    NumBinario.and(NumBinario.java:102)

    Cosa c'è alla riga 102 di NumBinario?
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  5. #5
    Utente di HTML.it L'avatar di el92
    Registrato dal
    Dec 2014
    Messaggi
    177
    c'è

    codice:
    int lunghezza2=nb.numero.length();

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da el92 Visualizza il messaggio
    c'è

    codice:
    int lunghezza2=nb.numero.length();
    Mi dice che c'è un errore di NullPointerException...perchè?

    codice:
            public NumBinario and(NumBinario nb){
                
                int lunghezza1=numero.length();
                int lunghezza2=nb.numero.length();
    Pensa: e se in 'nb' numero è null perché il NumBinario era stato creato da un int (quindi ha solo numero1 valorizzato)??

    Ti è chiara la questione? Perché è anche a livello concettuale:

    codice:
     class NumBinario{
      String numero;
      int numero1;

    La tua classe contiene 2 rappresentazioni. Non è tecnicamente sbagliato, di per sé. O ti assicuri che le due rappresentazioni siano sempre sincronizzate, oppure (e sarebbe più sensato) tieni una e solamente una rappresentazione.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it L'avatar di el92
    Registrato dal
    Dec 2014
    Messaggi
    177
    Ciao alla fine ho eliminato uno dei due costruttori...e viene tutto...grazie 1000 sei stato gentilissimo
    Ultima modifica di el92; 02-04-2015 a 18:19

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.