Create a public class Connections
with a single public constructor that accepts a String
.
The String
contains, in CSV format, a list of cities and other cities that they are connected to.
So, for example, the input:
Champaign,Chicago,St. Louis
Chicago,Detroit,Milwaukee
St. Louis,Champaign,Cincinnati
Means that Champaign is connected to Chicago and St. Louis, and that Chicago is connected to Detroit and
Milwaukee, and so on.
Essentially the CSV serializes a directed graph, where the first item on each line is a node and the other items
represent other nodes that it is connected to.
This is one way of serializing a directed, unweighted graph.
If the String
passed to the constructor is null
, throw an IllegalArgumentException
.
Make sure to trim
all the String
s that you extract from the CSV.
Your class should parse this String
and provide a single instance method isConnected
.
isConnected
accepts two String
s and returns true
if the first city is connected to the second based on the
graph passed to the constructor.
So, given the input above, isConnected("Champaign", "Chicago")
would return true
, but
isConnected("Chicago", "Champaign")
would return false
.
(Note that the graph is not necessarily symmetric.)
If either String
passed to isConnected
is null
, or if you don't have connection information for the source,
you should throw an IllegalArgumentException
.
Note that only the cities that appear first on each line in the CSV should be treated as cities you have
connection information for.
So, for example, even though "Detroit" appears as a destination from "Chicago" in the data set above, we do not
have a line starting with "Detroit", and therefore a call to isConnected
with "Detroit" as the first parameter
should throw an IllegalArgumentException
.
Our suggestion is to use a private field to store a data structure that you populate in your constructor.
This will keep your isConnected
method simpler.
Good luck, and have fun!
You're challenge is to write tests for this problem described above.
Stuck? You may find these lessons helpful: