CodeGuru Home VC++ / MFC / C++ .NET / C# Visual Basic VB Forums Developer.com
Results 1 to 2 of 2
  1. #1
    Join Date
    Jun 2012
    Posts
    0

    NullPointerException

    Hello everybody,
    I have an application where i use TDA as Map and so I have a Map of Maps where I store keys and values as String and Double as you see from the code bellow. So a Map that stores other Maps where I store information of movies and ratings. Then in the Map that contains the other Maps i store as value the name of the person that have given this oppinion about movies . I have implemented a method that calculates the euclidean distance between two users and it functions but when I try to use the same method inside another method that calculates the same thin but between a user and all the others it gives me an NullPointerExeption despite it compiles well.
    Can somebody give me an advice?
    This is the code:
    import java.util.*;

    public class MRdati {

    public static void main (String[]args){


    Map <String , Double> ratesLR = new HashMap<String , Double >();

    ratesLR.put("Lady in the water", 2.5);
    ratesLR.put("Snakes on a plane", 3.5);
    ratesLR.put("Just my luck", 3.0);
    ratesLR.put("Superman returns", 3.5);
    ratesLR.put("The night Listener", 3.0);
    ratesLR.put("You me and Dupree", 2.5);



    Map <String , Double> ratesGS = new HashMap <String , Double >();

    ratesGS.put("Lady in the water", 3.0);
    ratesGS.put("Snakes on a plane", 3.5);
    ratesGS.put("Just my luck", 1.5);
    ratesGS.put("Superman returns", 5.0);
    ratesGS.put("The night Listener", 3.0);
    ratesGS.put("You me and Dupree", 3.5);

    Map <String , Double> ratesMP = new HashMap <String , Double >();

    ratesMP.put("Lady in the water", 2.5);
    ratesMP.put("Snakes on a plane", 3.5);
    ratesMP.put("Just my luck", 1.5);
    ratesMP.put("Superman returns", 3.5);
    ratesMP.put("The night Listener", 4.0);
    ratesGS.put("You me and Dupree", 3.5);

    Map <String , Double> ratesCP = new HashMap <String , Double >();

    ratesCP.put("Lady in the water", 2.5);
    ratesCP.put("Snakes on a plane",3.5 );
    ratesCP.put("Just my luck ",3.0 );
    ratesCP.put("Superman returns", 4.0);
    ratesCP.put("The night Listener", 4.5);
    ratesCP.put("You me and Dupree", 2.5);

    Map <String , Double> ratesML = new HashMap <String , Double >();

    ratesML.put("Lady in the water", 3.0 );
    ratesML.put("Snakes on a plane", 4.0 );
    ratesML.put("Just my luck ", 3.0 );
    ratesML.put("Superman returns", 3.0);
    ratesML.put("The night Listener", 3.0);
    ratesML.put("You me and Dupree", 2.0);

    Map <String , Double> ratesJM = new HashMap <String , Double >();

    ratesJM.put("Lady in the water", 3.0 );
    ratesJM.put("Snakes on a plane", 4.0 );
    ratesJM.put("Just my luck ", 3.0 );
    ratesJM.put("Superman returns", 5.0);
    ratesJM.put("The night Listener", 3.0);
    ratesJM.put("You me and Dupree", 3.5);

    Map <String , Double> ratesT = new HashMap <String , Double >();
    ratesT.put("Lady in the water", 3.0 );
    ratesT.put("Snakes on a plane", 4.5 );
    ratesT.put("Just my luck ", 3.0 );
    ratesT.put("Superman returns", 4.0);
    ratesT.put("The night Listener", 3.0);
    ratesT.put("You me and Dupree", 1.0);



    Map<String, Map<String, Double>> critics = new HashMap<String, Map<String, Double>> ();

    critics.put("Lisa Rose", ratesLR);
    critics.put("Gene Seymour", ratesGS);
    critics.put("Michael Phillips", ratesMP);
    critics.put("Claudia Puig", ratesCP);
    critics.put("Mick Lasale", ratesML);
    critics.put("John Matthews", ratesJM);
    critics.put("Toby", ratesT);
    //System.out.println(critics.get("Lisa Rose"));
    //System.out.println(critics.keySet());


    MRdati mrd = new MRdati();
    System.out.println("dist euclid " + mrd.D("Lisa Rose", "Gene Seymour", critics));

    //calling this method gives me error in runtime
    MRdati mrd1 = new MRdati();
    System.out.println("risultato "+ mrd1.ListaR(critics, "Lisa Rose"));


    }
    // these are the methods

    public double D(String u1, String u2, Map <String,Map<String, Double>> critics){

    Map <String, Double> u1c = critics.get(u1);
    Map<String, Double> u2c = critics.get(u2);
    double d=0;


    for (String film: u1c.keySet()){
    double v1 = u1c.get(film); // per ogni stringa film trova il suo valore
    double v2 = u2c.get(film);
    if(v2 == 0)
    continue;
    d+=(v2-v1)*(v2-v1);
    }

    return Math.sqrt(d);
    }

    public double[] ListaR( Map <String,Map<String, Double>> critics, String w1){
    double []d = new double[critics.size()];
    int i=0;
    for (String critics_i: critics.keySet()){
    d[i]=D(w1, critics_i, critics);
    i++;
    }
    return d;
    }

    public Double [][] listaRlistaR(Map <String,Map<String, Double>>critics){
    int i=0;
    Double [][] d2=null;
    d2=new Double[critics.size()][critics.size()-1];
    for(String s : critics.keySet()){
    //d2[i] = ListaR(critics, s);
    i++;
    }
    return d2;
    }


    }

  2. #2
    Join Date
    May 2006
    Location
    UK
    Posts
    4,473

    Re: NullPointerException

    When posting code please use code tags and also post the full error message

    but when I try to use the same method inside another method that calculates the same thin but between a user and all the others it gives me an NullPointerExeption
    You aren't using the same method. The line that works calls mrd1.D(..), the line that fails calls mrd1.ListaR(..)

    The problem is occurring here:
    Map<String, Double> u2c = critics.get(u2);
    because you are searching for a film that isn't in the map and so the map returns null but null can't be auto cast from a Double to a double (auto unboxing) and so an exception is thrown. Admittedly this isn't a very easy to spot problem.

    You need to put the returned value into a Double and then check it for null before casting it to a double.

    despite it compiles well.
    The fact that it compiles doesn't mean it will run.
    Posting code? Use code tags like this: [code]...Your code here...[/code]
    Click here for examples of Java Code

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  





Click Here to Expand Forum to Full Width

Featured