Roger L. Kraft

CS 27500 - Programming Assignment 1

This assignment makes use of the files contained in this zip file. This assignment is due Wednesday, September 2.

In this assignment you will write a class called Car.java that can "simulate" some of the behavior of a real car. This assignment is based on material from Sections 2.1 & 2.2 of our textbook (and what you learned in CS 12300). Download this zip file and un-zip it. In the zip file there is a copy of this web page, which you can read in your browser, and some files that you need for this assignment.

Implement a class Car. A Car object should have three (private) instance variables, one for fuel efficiency (representing miles per gallon), one for fuel level (representing gallons), and a variable that acts as an odometer (representing miles). The fuel efficiency of a car should be specified as a parameter in a Car constructor and the constructor should set the fuel level and the odometer to zero. There should be getFuelEfficiency(), getOdometer(), and getFuelLevel() methods. There should also be a method addFuel(double gallons) which adds a specified amount to the fuel level and returns the new fuel level, and there should be a method drive(double miles) which simulates driving the car a specified distance. The drive() method should adjust the fuel level by the amount of fuel used, adjust the odometer by the amount of miles driven, and it should return the number of miles driven, which may be less than the number of miles specified if there is not enough fuel. (Notice that there are no setFuelEfficiency(), setOdometer(), and setFuelLevel() methods. The fuel efficiency field is immutable; once it is set by the constructor, it cannot be changed. The odometer should only be changeable by driving the car, as in a real car. The fuel level should only be changed by driving the car or by adding fuel.)

Your Car.java file should include Javadoc specifications for the class and each method, as described on pages 6 - 9 and Appendix H of our textbook. Be sure to run the javadoc compiler on your Car.java file to produce a Car.html file.

In the zip file there is a file PreTestDrive.java. This file tests the public interface of your Car class. After you have written your version of Car.java, you should be able to compile and run PreTestDrive.java. When you run it, it should report that there are no problems with your Car class.

Write a client program TestDrive.java that uses your Car class. This program should prompt a user for a fuel efficiency, construct a Car object, prompt the user for an amount of fuel, put the fuel in the Car object, prompt the user for a distance to travel, drive the appropriate distance, and then report back to the user the distance actually traveled, the current fuel level, and the current odometer reading. Your program should let the user drive the car until the user enters a distance of zero. Then your program should prompt the user for an amount of fuel to add to the car and then let the user drive the car some more. If the user enters zero for the amount of fuel to add, then your program should prompt the user for a new fuel efficiency and construct a new Car object and let the user drive the new car. Your program should terminate if the user enters zero for the fuel efficiency.

In the zip file there is a program TestDriveDemo.class that is a demonstration version of the client program you are to write. After you have written your version of Car.java, you should be able to run TestDriveDemo.class. Your version of TestDrive.java should work exactly like the demo version!

As part of grading your assignment, I will use the program PreTestDrive.java (from the zip file), to test if your Car class implements the proper public interface as specified in the paragraphs above. I will also generate a Javadoc file from your Car.java. And then I will compile and run your version of TestDrive.java to make sure that it works exactly like TestDriveDemo.class.

Turn in a zip file called CS275Hw1Surname.zip (where Surname is your last name) containing your versions of Car.java and TestDrive.java.

This assignment is due Wednesday, September 2.