HW: Anagrams due Fri 04 Apr 10:00

This assignment provides practice in combining arrays and linke...
...of previously-written code and to explore an interesting


An anagram is a word that results from rearranging letters from another word. For example, ``listen'' and ``silent'' are anagrams. For the purposes of this assignment we define the term ``anagram family'' to refer to all words that can be composed from a given collection of letters.

In this program you will create an array of anagram families where each family is represented using a linked list. You will accomplish this by reading a word from the dictionary, sorting the letters in the word and then searching for the letters in the existing list using a binary search. If the letters are found you will add the new word to the existing anagram family. If the letters are not found then you will create a new anagram family and insert it into the array at the appropriate location (i.e., ordered based on the sorted letters).

Once the structure has been built you will traverse it to produce the following information:

You'll notice this assignment leaves quite a few details unspecified. Your program should embrace fully the object-oriented paradigm. Beyond that feel free to organize the program in ways that you feel makes sense.


The assignment will be graded according to the following criteria:
Correctness 20 pts
Object-Oriented Design 6 pts  
Documentation 2 pts
Conventions 2 pts
Version Control 2 pts
Total 32 pts

Your program should be completely working and should follow all of the programming conventions named in class and explained in http://josephus.hsutx.edu/classes/all/javaconventions/ (including the use of comments that conform to the JavaDoc guidelines).

The instructor will grade your work based on what you have pushed to the hosted homework repository you have shared. For all assignments the program is due before the beginning of class on the due date. Repositories that show a commit time after that time will be graded as late.

Quick Links