CSC 241- Lab 2 (Due February 14th 1997)


Theme ...

This is mainly to review Java. However, the exception handling features of the language are also discussed here. I also want you to think about writing pre and post conditions and generating test cases for programs, so I have included things in this module for that purpose.

You will initially get a copy of the Tank class and the test programs that where written for it. We will then make sure that you can correctly compile and execute Java programs. Your main task here will be to make some changes in the state and behavior of the tank class and to write a few of your own test programs to test those changes.


Create directories

  1. cd public-html/classes/csc241
  2. mkdir Tank
  3. chmod og+rx Tank
  4. cd Tank
  5. mkdir testTank -- you don't need the protection changed.

Copy Tank and its test programs

I am assuming that you are in your Tank directory.

  1. cp /csclass/mohammad/public-html/classes/csc241/Tank/*.java . -- don't forget the dot
  2. cp /csclass/mohammad/public-html/classes/csc241/Tank/testTank/*.java testTank
  3. cp /csclass/mohammad/public-html/classes/csc241/Tank/testTank/test.dat . -- don't forget the dot

Compile Tank and the test programs and run the programs

  1. javac Tank.java -- to compile Tank
  2. cd testTank
  3. javac *.java -- to compile all test programs
  4. java test_simple_tank -- to run test_simple_tank
  5. Try running some of the programs that test exceptions.
  6. Run test_more_tank. This one has test.dat as its data file, you will prompted for it.

Here is when you begin working.

Pre/post conditions

Here are the pre/post conditions for method add of class Tank:
                   public void add(int amount)
                   /**
                      Precondtion: amount>=0 && (amount+content_) <= capacity
                      Postcondition: content_ == content_~+amount
                    **/

In the precondition we are specifying what we consider valid for our parameter and the state of content_. If you check the code, you will notice that if our parameter is negative, we throw an exception. We also throw an exception, if amount causes an overflow. In the postcondition, content_~ refers to the old value of content_, and it simply states that the new value must be equal to the old value plus amount when this method is done.


                   public void remove(int amount)
                   /**
                      Precondition: 
                      Postcondition: 
                    **/

Make capacity into an Object variable

The Tank class has a static variable capacity. Static means all tanks will end up with same capacity. We want to change that here. We want capacity to be either defaulted to 5000, or be given by the user of the class at the time of the object construction. Also, we no longer want to set initial content at the time of the construction.

In responding to the following, begin modifying the Tank class.

Test this change

Use test_simple_tank as an example and write one or two test programs that ensure your changes worked correctly. You need to make sure that both the default constructor and the one that sets initial capacity work. Also, if you added a method to provide the value of capacity to the class user, you would need to test that method also. I guess, it will be my job to see if you made the right changes.


Add a new method

Add a boolean method samePercentage to the Tank class that allows for comparing the fullness of two tanks. This method will have a parameter which is a Tank object and compares the content/capacity of the parameter against content/capacity of the object for which the method was invoked. If they are the same, retuns true, otherwise returns false. Keep in mind that content and capacity are both int, and dividing int variables results in another int, so, instead of getting, say, .67 when looking for a percentage, you will get 0. Convert them to float or double before dividing.

Test this addition

Use test_more_tank.java as a model and write a test program for this new method. Also create a data file, initially, with the following values:

1 23
2 230
1 13
2 130
1 10
2 100

Note that there are two integer values on each line. The code that I wrote in test_more_tank.java to extract an integer from an input line won't work here. text = istream.readLine(); read a line from the data file and stored it in text which is a String variable. int am = Integer.parseInt(text); converts the value in text to an integer. How can you extract two integers from a string? Read the specifications for input carefully and follow this link for the definition of the String Class if you need to.

The first number on a line indicate which tank. Assume there are only two tanks and that the first value is either 1 or 2. Also assume that this first value is always the first character on a line. The second value determines the amount that you will be adding to the specified tank. Once all data values are processed, you should use the samePercentage method to determine if both tanks are at the same fullness level and output an appropriate message. Assume that tank1 will have a capacity of 100 and tank2 a capacity of 1000. Test with the data given, also test to make sure that the method handles tanks with different fullness level correctly also.