The complete specification of assignment #4 can be found as part of the stream at iTunes.
Reading the lexicon from a data file
Part III of this assignment is by far the easiest and requires considerably less than half a page of code.
Your job in this part of the assignment is simply to reimplement the HangmanLexicon class so that instead of selecting from a meager list of ten words, it reads a much larger word list from a file. The steps involved in this part of the assignment are as follows:
- Open the data file HangmanLexicon.txt using a BufferedReader that will allow you to read it line by line.
- Read the lines from the file into an ArrayList.
- Reimplement the getWordCount and getWord methods in HangmanLexicon so that
they use the ArrayList from step 2 as the source of the words.
The first two steps should be done in a constructor for HangmanLexicon, which you will need to add to the file. The last step is simply a matter of changing the implementation of the methods that are already there.
Here is how the HangmanLexicon constructor should be added to the HangmanLexicon class:
public class HangmanLexicon { // This is the HangmanLexicon constructor public HangmanLexicon() { // your initialization code goes here } // rest of HangmanLexicon class... }Note that nothing in the main program should have to change in response to this change in the implementation of HangmanLexicon. Insulating parts of a program from changes in other parts is a fundamental principle of good software design.
Open the file, create a new ArrayList and add each line to the list:
public HangmanLexicon() { try { BufferedReader rd = new BufferedReader( new FileReader(DATA_FILE) ); wordList = new ArrayList<String>(); while (true) { String line = rd.readLine(); if (line == null) break; if (!wordList.contains(line)) { wordList.add(line); } } } catch (IOException ex) { throw new ErrorException(ex); } }
Then return the size of the list, or the indexed word respectively:
public int getWordCount() { return wordList.size(); } public String getWord(int index) { return wordList.get(index); };
The code for this assignment is available on github.