Consider your basic maze. It has walls and pathways, and it has one (or more) starting point(s) and one (or more) finish point(s). Furthermore, one wall is just like another, and any open spaces (not including start and finish) are also identical. That sounds like a job for... enumerated types! So, make an enumerated type Square that can represent those four values. Each one has an associated one-character representation: walls # (hash mark) open spaces . (period) start o (lowercase `O') finish * (asterisk) Include in the enumerated type a toString method that returns a one-character-long string containing only the character corresponding to this Square. Also include a static method fromChar that returns the Square associated with the given char. (That is, a method with header public static Square fromChar (char ch) that, when provided with one of the four legal characters, returns one of the Square values. Any other input can generate an IllegalArgumentException.)