public String findPrintDirection(){
    if((dirFrom==-1)||(dirTo==-1)){
      return "Direction Index Out Of Bound!";
    }
    if(dirFrom>=current || dirTo>=current){
      return "Direction Index Out Of Bound!"; 
    }
    if(dirFrom==dirTo){
      return "[Location From: "+locations[dirFrom].getName()+"]\nis the same as\n[Location To: "+locations[dirTo].getName()+"].";
    }
    Path p = shortestPath(dirFrom);
    if(p.distance[dirTo]==MaxDistance){
      return "Cannot Find Path!"; 
    }
    if(scaleFeetPixel==0){
      String s=JOptionPane.showInputDialog("Please set the scale feet per pixel:");
      if(s==null){
        return "You did not set the scale feet per pixel!"; 
      }
      double sfpp=0;
      while(sfpp==0){
        try{
          sfpp=Double.parseDouble(s);
          if(s==null){
            return "You did not set the scale feet per pixel!"; 
          }
          scaleFeetPixel=sfpp;
        }catch(Exception e){
          s=JOptionPane.showInputDialog("Please set the scale feet per pixel:");
        }
      }
    }
    // Print distances
    String distanceString = "Distance:\n";
    distanceString += "[ID: "+locations[dirFrom].getID()+" Name: "+locations[dirFrom].getName()+"] to " +
      "[ID: "+locations[dirTo].getID()+" Name: "+locations[dirTo].getName()
      +"]\nis "+p.distance[dirTo]*scaleFeetPixel+".\n"; 
    
    // Print path
    String pathString="\nPath:\n";
    int counter=0;
    int u=dirTo;
    int newu;
    int[] arr=new int[current];
    arr[counter++]=u;
    do{
      newu = p.path[u];
      u=newu;
      arr[counter++]=u;
    }while (u != dirFrom);
    int i,j;
    for(i=counter-1,j=1;i>0;i--,j++){
      pathString+="[ID: "+locations[arr[i]].getID()+" Name: "+locations[arr[i]].getName()+"]->\n";
    }
    pathString+="[ID: "+locations[arr[0]].getID()+" Name: "+locations[arr[0]].getName()+"]\n";
    return (distanceString+pathString);
  }