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;
}


}