Not particularly sure what's causing this IndexOutOfBoundsException
to occur. The code works perfectly find if I hard code all of the addFlightPath()
parameters, but as soon as I attempt to use a for loop to populate the flightPaths
arrayList an IndexOutOfBoundsException
is thrown. I'm probably missing something small but I'm not sure what it could be.
The exception is thrown on the call to flightPaths.add(path)
within the addFlightPath
method
public class DijkstrasController
{
private FlightDatabase flightDatabase;
private List<Vertex> nodes;
private List<Edge> flightPaths;
public DijkstrasController(FlightDatabase flightDatabase)
{
this.flightDatabase = flightDatabase;
populateDijkstrasGraph(flightDatabase);
}
public String[] runDijkstras(String sourceAirport, String destinationAirport)
{
//Removed for visibility
}
public void populateDijkstrasGraph(FlightDatabase fdb)
{
nodes = new ArrayList<Vertex>();
flightPaths = new ArrayList<Edge>();
for (int i = 0; i < (fdb.getDatabaseSize()); i++)
{
Vertex location = new Vertex("Node_" + i, nodeNumberToNodeLetter(i));
nodes.add(location);
//This block of code throws an IndexOutOfBounds error
AirJourney journey = fdb.getFlightDetails(i);
String pathId = "Path_" + journey.getOriginAirport() + journey.getDestinationAirport();
int sourceAirport = nodeLetterToNodeNumber(journey.getOriginAirport());
int destinationAirport = nodeLetterToNodeNumber(journey.getDestinationAirport());
int distance = journey.getNumberOfMilesToTravel();
addFlightPath(pathId, sourceAirport, destinationAirport, distance);
}
// Uncommenting this section of code allows the program to function normally
// addFlightPath("Path_AB", 0, 1, 800);
// addFlightPath("Path_BC", 1, 2, 900);
// addFlightPath("Path_CD", 2, 3, 400);
// addFlightPath("Path_BF", 1, 5, 400);
// addFlightPath("Path_DE", 3, 4, 300);
// addFlightPath("Path_EB", 4, 1, 600);
// addFlightPath("Path_CE", 2, 4, 200);
// addFlightPath("Path_DC", 3, 2, 700);
// addFlightPath("Path_EB", 4, 1, 500);
// addFlightPath("Path_FD", 5, 3, 200);
// addFlightPath("Path_DE", 3, 4, 400);
// addFlightPath("Path_CE", 2, 4, 300);
}
private void addFlightPath(String pathId, int sourceAirport, int destAirport, int distance)
{
Edge path = new Edge(pathId, nodes.get(sourceAirport), nodes.get(destAirport), distance);
flightPaths.add(path); //IndexOutOfBounds exception is thrown here
}
}
Stack Trace
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
at java.util.ArrayList.rangeCheck(ArrayList.java:657)
at java.util.ArrayList.get(ArrayList.java:433)
at core.dijkstras2.DijkstrasController.addFlightPath(DijkstrasController.java:83)
at core.dijkstras2.DijkstrasController.populateDijkstrasGraph(DijkstrasController.java:63)
at core.dijkstras2.DijkstrasController.<init>(DijkstrasController.java:19)
at core.dijkstras2.DDriver.main(DDriver.java:10)