CSE115 Lab 8 Spring 2016 DUE DATES:

advertisement
CSE115
Lab 8
Spring 2016
DUE DATES:
Tuesday recitations: 9:00 PM on 4/4
Wednesday recitations: 9:00 PM on 4/5
Thursday recitations: 9:00 PM on 4/6
Friday recitations: 9:00 PM on 4/7
Ready!
This lab is the first of three labs that all together have you build a version of the game TextTwist2.
TextTwist2 is a game in which you create words from the letters of a seven-letter word. For
example, if we pick "smooths" as our reference word we can form words such as "moth", "moths",
"moot", "soot", "hot", "toss", etc.
There are several websites where you can play this game, including:
http://www.shockwave.com/gamelanding/texttwist2.jsp
You can probably find others. Read the instructions for the game, and try it out, so you have a
better understanding of what you're aiming for. Our rules may be a little different in the end, so
don't get too hung up on the specific rules (especially if you look at several different websites).
You will build part of the functionality of the game in this lab (lab 8), tackle a bit more in lab 10,
and finish it off for lab 12. By interleaving labs 9 and 11 we will be able to make solutions to
earlier stages of the lab 8-10-12 sequence available in case you don't quite finish everything.
For this lab you will be building some of the core underlying functionality of the game, but not the
user interface.
Set!
1.
2.
3.
4.
5.
Log in
Start Eclipse
Switch to the CVS Repository Exploring perspective
Check out the CSE115-Lab8 project from the Labs repository
Switch to the Java perspective
Go!
We are again providing some JUnit tests to help you assess whether your code is performing
correctly. You will need to define a class and several methods to work with these JUnit tests. You
MUST use the method names given below. If you do not the JUnit tests will not compile and run
correctly. You may NOT change the JUnit tests.
Step 1: read words from a file
A list of possible words will be read from a file. In lab 8 the word file is pretty small (just 260
words). By the time the game is finished we will use a free open-source word list with over
113,000 words.
Because words with seven letters will be used as starting points for the list of words to be found in
each round of the game, it turns out it will be convenient to keep the seven letter words in a
separate data structure.
CSE115
Lab 8
Spring 2016
In the code package, we have given you a little bit of a start on the Model class, to ensure that
JUnit testing runs smoothly. We have defined the Model with two instance variables, one of type
HashSet<String> and one of type ArrayList<String>. These two collections will be used to store
words that your program reads from a file, the former for possible 'guess' words and the latter for
seven-letter reference words. We have also provided one constructor for the class, that allows a
Model to be associated with a specific HashSet and ArrayList of words.
Define a second constructor for the Model class with just a single String parameter (this will be the
name of file containing the word list) that properly initializes the two instance variables, and then
calls a method (see next paragraph) to read the contents of a file, passing along the value of the
constructor's parameter as argument.
Next, define the method to read words from a file and populate the two data structures (the
ArrayList and the HashSet). Add the words that are of length 7 into the ArrayList, and the words of
length less than 7 into the HashSet.
To make reading from a file a little easier we are providing you with the class CSE115FileReader.
This class defines an Iterator<String>. Its constructor takes a String as an argument; the String is
the name of the file whose contents the iterator will read. The iterator's next() method returns
the next unread line from the file; its hasNext() method returns false when there are no more lines
in the file to visit.
If you create a CSE115FileReader with the name of a non-existent file then hasNext() will always
return false and next() will always return null.
Step 2: String as a sequence of Characters
Define a method that takes a String as an argument and returns an ArrayList<Character> that
contains the characters of the String, in the same order.
This is independent of step 1. You must name this method string2charList.
Step 3: Is String made up of letters in ArrayList<Character>?
Define a method that takes a String and an ArrayList<Character> as arguments, and returns true if
the all of the characters of the String appear in the ArrayList, and false otherwise.
For example, if the ArrayList<Character> contains the letters from "smooths" (i.e. 's', 'm', 'o', 'o', 't',
'h', and another 's') then "toss" should yield true (since there is one 't', one 'o', and two 's' characters
in the ArrayList. However, "moms" should yield false because there are not two 'm' characters in
the ArrayList.
This is independent of steps 1 and 2. You must name this method anagramOfLetterSubset.
Step 4: Create a HashSet<String> of all the words that can be formed from the letters in a
String
Define a method that takes a String as an argument a returns a HashSet<String> of all the words
from the word list that are of length 3, 4, 5, or 6 and can be made from the letters in the
argument.
CSE115
Lab 8
Spring 2016
This method relies on the word list having been set up in the constructor (step 1), and uses the
methods defined in steps 2 and 3. You must name this method possibleWords.
Submitting your project to Web-CAT
Make sure you submit your work on time; due dates are listed at the beginning of this lab
description. This lab will be automatically graded by Web-CAT. You may submit as many times as
you wish. Your last submission is the one that counts (so consider carefully whether you want to
make any late submissions, as the late penalty is 20 points per day or portion thereof late).
Pay attention to the output produced by Web-CAT. If your submission scores 100 (without any
early submission bonus you might be entitled to) you're all set. If your submission does NOT score
100, fix the problem and resubmit. Prior to the submissions deadline we expect that you will
continue working until your submission scores 100.
Download