Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 5.3

Homework 10: SimLaundry2010SimLaundry 2010

Due Friday Wednesday, 9  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 (members with degenerate bodies (return "";).    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.

Text Mode

   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.

Text Mode

You may find it easier to run the simulation You may find it easier to run the simulation as a textual input application.   Simply right-click the {edu.rice.comp211.laundry.Main.java}} file and select "Run File" or change the the DrJava project properties to change the Main Class to this classand then use the Run Project button. 

...

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
    Code Block
    receive <adjective>  <article>
    
    means Acker received a gift of the specified article (<adjective> <article>) of clothing. In response, the simulation outputs
    Code Block
    received <adjective> <article>
    
    and updates the state of the StudentEnvironment. For example,
    Code Block
    receive argyle socks
    
    generates
    Code Block
    received argyle socks
    
    and adds the argyle socks to the top of the socks pile on the shelf.

  • The command
    Code Block
    lose <adjective> <article>
    
    means Acker misplaced the specified article of clothing. If the item exists and Acker is not wearing it, the simulation outputs
    Code Block
    lost <adjective> <article>
    
    and updates the state of the StudentEnvironment accordingly. If Acker is wearing it, the simulation outputs
    Code Block
    Acker is wearing <adjective> <article>
    
    and leaves the StudentEnvironment unchanged. If the item does not exist, the simulation outputs
    Code Block
    <adjective> <article> does not exist
    
    and leaves the StudentEnvironment (i.e. Acker) unchanged.

  • The command
    Code Block
    
    change <article>
    
    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 outputs
    Code Block
    
    doffed <adjective> <article>, donned <adjective>
    change <article>
    
    means Acker describing the article doffed and 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 outputs
    Code Block
    
    doffed <adjective> <article>, donned <adjective> <article>
    
    describing the article doffed and the article donned.
    article donned.
    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 wearing black-ink-grunge pants:
    Code Block
    
    Nothing to change into! Doffed black-ink-grunge pants, donned black-ink-grunge pants
    


  • The command
    Code Block
    {{launder}}
    
    means Acker washed and dried a load of laundry. If the dirty clothes pile is not empty, the simulation outputs
    Code Block
    washed <adjective> <article>, ..., <adjective> <article>
    
    listing the clothes in the order they were removed from the dirty clothes pile. If the dirty clothes pile is empty, the simulation outputs
    Code Block
    nothing to wash
    

  • The command
    Code Block
    fold
    
    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 outputs
    Code Block
    folded <adjective> <article>, ..., <adjective> <article>
    
    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 outputs
    Code Block
    nothing to fold
    
    If the oldest load is empty (because all items in it were lost), the simulation outputs
    Code Block
    folded empty load
    

  • The command
    Code Block
    outfit
    
    asks "what is Acker wearing?" The simulation outputs
    Code Block
    wearing <adjective> <shirt>, <adjective> pants, <adjective> socks
    

...

 You are responsible for testing your own program.

Supplemental Program Running Information

...

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

...