import java.io.*;
import java.util.*;

class DotProductCalc
{
	public static void main(String args[])
	{}

	public void getNeighborDotProduct(Map edges, String filelocation)
	{
		try	{
      		//create file 
      		FileWriter fstream = new FileWriter("Neighbor Dot Product Calculated Direct List.txt");
      		BufferedWriter out = new BufferedWriter(fstream);
		Set nodeSet = edges.keySet();//get all nodes

		Iterator nodeIterator = nodeSet.iterator();
		while (nodeIterator.hasNext())//loop over all nodes
		{
			Integer node = (Integer)nodeIterator.next();//get node
			int nodeInt = node.intValue();//get int value of node
			//go through file and find string associated with node membership vector
			FileInputStream fstream2 = new FileInputStream(filelocation);
  			// Get the object of DataInputStream
  			DataInputStream in = new DataInputStream(fstream2);
  			BufferedReader br = new BufferedReader(new InputStreamReader(in));
			
			//go through all the lines before correct vector
			for (int i = 0; i < nodeInt; i++)
			{
				br.readLine();
			}
			String vector = br.readLine();//read node vector
			String[] nodeTokens = vector.split(" ");//get individual membershipRatios
System.out.println("Node: " + nodeInt + " Vector: " + vector);			

			ArrayList edgeList = (ArrayList)edges.get(node);//get neighbors of node
			Iterator neighborIterator = edgeList.iterator();
			while (neighborIterator.hasNext())//loop over all neighbors
			{
				Integer neighbor = (Integer)neighborIterator.next();//get neighbor
				int neighborInt = neighbor.intValue();//get int value of node
				for (int j = 0; j < neighborInt; j++)
				{
					br.readLine();
				}
			String vector2 = br.readLine();//read node vector
			String neighborTokens[] = vector2.split(" ");//get individual membershipRatios
System.out.println("Neighbor: " + neighborInt + " Vector: " + vector2);	

				//loop through vector to calculate dot product
				double dotProduct = 0;
				for (int k=1; k<nodeTokens.length; k++)//skip first String, which represents the node
				{
					//read membershipRatio
					double nodeRatio = Double.parseDouble(nodeTokens[k]);
					double neighborRatio = Double.parseDouble(neighborTokens[k]);
					dotProduct = dotProduct + nodeRatio*neighborRatio;
				}


				out.write(nodeInt + " " + neighborInt + " " + dotProduct + "\n");
			}

		}


    	out.close();
    	}catch (Exception e){//Catch exception if any
    	System.err.println("Error: " + e.getMessage());
    	}
	}
}
