-
June 7th, 2012, 06:09 AM
#1
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;
}
}
-
June 8th, 2012, 11:32 AM
#2
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.
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
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|