private void setLayerNeuronInputs(ArrayList<Double> currentInputsX, int layerIndex, int exampleIndex, boolean printInfo){
		
		if(printInfo){
			
			//System.out.println("Setting inputs for Layer : " + layerIndex);
			
		}
			ArrayList<Perceptron> currentLayer = getLayerNeurons(layerIndex, false);
			
			
			if(layerIndex == -1){ // If it is an input layer, it's a dummy neuron.  Set to inputs
				
				ArrayList<Double> inputLayerInputs = MlUtils.duplicateArrayList(currentInputsX);
				
				//System.out.println("\tRaw Inputs:" + inputLayerInputs);
				
				for(int j = 0; j< currentLayer.size(); j++){
					
					Perceptron neuron = currentLayer.get(j);
					//System.out.println(" Input layer inputs " + inputLayerInputs);
					double inputValue = inputLayerInputs.get(j);
					//System.out.println("   at value : " + inputValue);
				
					// Since it's an Input Dummy Neuron,
					// Set the output value to the Raw input X value
				
					neuron.setOutput(inputValue);
					neuron.setSum(inputValue);
					
					if(this.printFeedForwardDetails){
						System.out.print("Inputs set to : ");
						neuron.getOutput(printFeedForwardDetails);
					}
					
					neuron.getSum(false);
					
				}
				
			}else{ ////!!!!!!!!!1 Otherwise, find out from the hash map, what the connections are
				
				
				
				for(int i = 0; i< currentLayer.size(); i++){
					
					ArrayList<Double> inputsForCurrentNeuron = new ArrayList<Double>();
					Perceptron neuron = currentLayer.get(i);
					if(this.printFeedForwardDetails){
						System.out.println("\nCurrent Neuron: " + neuron);
					}
					
					int layerHashMapIndex = layerIndex + 1; // because the first array is the inputs at -1
					//System.out.print("    -- at layer : " + layerHashMapIndex + "\n");
					int[] neuronConnectedNeurons = getNetworkStructure(false).get(layerHashMapIndex).get(neuron.getNeuronID(false));
					
					for(int j = 0; j< neuronConnectedNeurons.length; j++){
						
						int connectedNeuronIndex = neuronConnectedNeurons[j];
						Perceptron connectedNeuron = getNeuronID(connectedNeuronIndex, false);
						//System.out.println("\tConnection : " + connectedNeuron);
						double outputOfConnectedNeuron = connectedNeuron.getOutput(false);
						inputsForCurrentNeuron.add(outputOfConnectedNeuron);
						
					}
					
					double currentBiasValue = neuron.getBiasValue(false);
					inputsForCurrentNeuron.add(currentBiasValue);
					//System.out.println("\t\t "+ inputsForCurrentNeuron);
					neuron.setInputs(inputsForCurrentNeuron);
					if(this.printFeedForwardDetails){
						System.out.print("\t\t");
					}
					neuron.getInputs(this.printFeedForwardDetails);
				}
				
			}
		
	}