Homework 10: SimLaundry2010SimLaundry 2010
Due Friday Wednesday, 11 13 April 2010 at 11:00 A.M.
Preface
This assignment has a long description but the coding involved is straightforward. Most of the code for the full application has been written as support code by the course staff. In our solution, the remaining code that you must write (excluding test code) consists of approximately 250 lines (including comments and whitespace lines).
...
Acker never discards clothing, no matter how threadbare, but does, on rare occasions, lose some. Not only does Acker lose While Acker does not lose clothes being worn, but they can be lost from anywhere else, including the closet shelf, the dirty laundry pile, and the laundry room.
...
After unzipping the laundry.zip
file, you can open the DrJava laundry project by starting DrJava, setting the Language Level
to Full Java
, pulling down the Project
menu and selecting the Open
command. In the file chooser that pops up, select the project profile file laundry.drjava
embedded in the file in the unzipped file tree for laundry.zip
. You can save the project state at any point during a DrJava session using the Save
command in the Project
menu. You can also save individual files within the project using the Save
button on command file or the File
menu.
Your assignment is to fill in the stubbed out members of the DoCommandVisitor
All required areas in the code are clearly marked with comments for the student to complete the code in that area. In the process you may choose to define some new classes to support your DoCommandVisitor
class implementation. The Student
class which repeatedly invokes DoCommandVisitor
models the laundry habits of Acker. In our test simulations, we will typically only create a single instance of Student
representing Acker, but your code should support multiple students (e.g., Acker and his brothers) at a time. Since these students do not interact with each other, supporting this form of multiplicity is a trivial consequence of OO coding style used in the framework.
...
The GUI version also allows you to run individual commands. Select the "GUI
" mode from the drop list in the lower left corner of the window. The GUI will then allow you to create and run one command at a time. This is useful for testing a single command, but may be more tedious than running in text mode (see below).
The "Threaded}
" mode allows you to simulate multiple students sharing laundry piles. Each student runs a difffernt set of commands from individually specified input files. There appears to be a latent threading bug that has nothing to do with the student code that can pop up occasionally and crash the simulation. Running multiple students is not a requirement here and nothing in the student-written code would affect this, so don't worry about running in {{Threaded
mode, though it is kind of interesting to watch.
...
Use the test files in the data}
folder as guides for inputs and expected outputs. For example, given the text input in {{sampleIn.txt
, your program should generate the text in sampleOut.txt
. testIn.txt
is a fairly extensive test. You'll probably want to start with something smaller such as sampleIn.txt}
or {{tinyIn.txt
though.
Initially, the provided framework should compile but LaundryTest
will fail because most of the members in the key class DoCommandVisitor
have been stubbed out.
Important Note: When the simulation begins, Acker is wearing white pants, white socks, and a white shirt. The closet shelf, dirty laundry pile, and laundry facilities are all initially empty.
Assume that the supplied test files are NOT exhaustive!! You are responsible for the complete testing of your code!
Development Process Recommendation
...
- The command
means Acker received a gift of the specified article (<adjective> <article>) of clothing. In response, the simulation outputsCode Block receive <adjective> <article>
and updates the state of theCode Block received <adjective> <article>
StudentEnvironment
. For example,
generatesCode Block receive argyle socks
and adds theCode Block received argyle socks
argyle socks
to the top of thesocks
pile on the shelf. - The command
means Acker misplaced the specified article of clothing. If the item exists and Acker is not wearing it, the simulation outputsCode Block lose <adjective> <article>
and updates the state of theCode Block lost <adjective> <article>
StudentEnvironment
accordingly. If Acker is wearing it, the simulation outputs
and leaves theCode Block Acker is wearing <adjective> <article>
StudentEnvironment
unchanged. If the item does not exist, the simulation outputs
and leaves theCode Block <adjective> <article> does not exist
StudentEnvironment
(i.e. Acker) unchanged. - The command
means Acker doffed the specified article of clothing, discarding it in the dirty laundry pile, and donned a replacement article using the protocol described above. In response, the simulation outputsCode Block change <article>
describing the article doffed and the article donned.Code Block doffed <adjective> <article>, donned <adjective> <article>
If Acker has no clean garment of the specified type, the status string returned should indicate this. For instance, suppose Acker was asked to change his pants when he has no clean pants and is already wearingblack-ink-grunge pants
:Code Block Nothing to change into! Doffed black-ink-grunge pants, donned black-ink-grunge pants
- The command
means Acker washed and dried a load of laundry. If the dirty clothes pile The commandCode Block launder
means Acker washed and dried a load of laundry. If the dirty clothes pile is not empty, the simulation outputsCode Block {{launder}}
listing the clothes in the order they were removed from the dirty clothes pile. If the dirty clothes pile is empty, the simulation outputsCode Block washed <adjective> <article>, ..., <adjective> <article>
Code Block nothing to wash
- The command
means Acker retrieved a load of laundry, folded it, and put it on the closet shelf. If a load of laundry is available, the simulation outputsCode Block fold
for the oldest unfolded load. List the clothes in the order they are placed on the shelf. Hence the top garment on the shelf should be the last one listed. If no load of laundry has been washed and dried, then the simulation outputsCode Block folded <adjective> <article>, ..., <adjective> <article>
If the oldest load is empty (because all items in it were lost), the simulation outputsCode Block nothing to fold
Code Block folded empty load
- The command
asks "what is Acker wearing?" The simulation outputsCode Block outfit
Code Block wearing <adjective> <shirt>, <adjective> pants, <adjective> socks
...
Supplemental Program Running Information
...
The program starts execution using the special method {{public
static
void
main(String
\[
\]
args)
}} in class {{Main
}}. The {{main
}} method interface is the only vehicle for executing Java programs directly from the command line. (DrJava has a {{main
}} method for this reason.)
Since your class containing main
is called edu.rice.comp211.laundry.Main
, you can enter the line
...