Carpet calculator program

The problem

The westfield carpet company has asked you to write an application that calculates the price of carpeting for rectangular rooms. To calculate the price, you multiply the area of the floor(width times length) by the price per square foot of carpet. For example, the area of floor that is 12 feet long and 10 feet wide is 120 square feet. To cover that floor with carpet that costs $8 per square foot would cost $960 (12x10x8=960)

First, you should create a class named RoomDimension that has two Feields: one for the lenght of the room and one for the width. The RoomDimension class should have a method that returns the area of the room (the area of the room is the room's length multiplied by the room's width).

Next, you should create a RoomCarpet class that has a RoomDimension object as a field. It should also have a field for the cost of the carpet per square foot. The RoomCarpet class should have a method that returns the total cost of the carpet.

Once you have written these classes, use them in an application that asks the user to enter the dimensions of a room and the price per square foot of the desired carpeting. The application should display the total cost of the carpet.

Breaking it down

RoomDimension class

/**
 * This class should hold information about the room's dimensions such as
 * the height and width.
 * 
 */
public class RoomDimension {

    private double length;
    private double width;

    public RoomDimension(double length, double width) {
        super();
        this.length = length;
        this.width = width;
    }

    public double getLength() {
        return length;
    }

    public double getWidth() {
        return width;
    }

    public double getArea() {
        return length * width;
    }

    @Override
    public String toString() {
        return "RoomDimension [length=" + length + ", width=" + width + "]";
    }

}

RoomDimension class

/**
 * RoomCarpet class should hold information for calculating the cost of
 * carpet.
 * 
 */
public class RoomCarpet {

    private RoomDimension roomDimensions;
    private double costOfCarpet;

    public RoomCarpet(RoomDimension roomDimensions, double costOfCarpet) {
        super();
        this.roomDimensions = roomDimensions;
        this.costOfCarpet = costOfCarpet;
    }

    public double getTotalCost() {
        return costOfCarpet * roomDimensions.getArea();
    }

    @Override
    public String toString() {
        return "RoomCarpet [roomDimensions=" + roomDimensions
                + ", costOfCarpet=" + costOfCarpet + ", "
                        + "total cost=" + getTotalCost() + "]";
    }

}

Main method

public static void main(String[] args) {

    final double CARPET_PRICE_PER_SQFT = 8.0;

    // Create a Scanner object for keyboard input.
    Scanner keyboard = new Scanner(System.in);

    // Display intro.
    System.out.println("This program will display the "
            + "carpet cost of a room." + "\nPlease enter the room's "
            + "dimension in feet.");

    // Get the length of the room.
    System.out.print("Enter the length of room: ");
    double length = keyboard.nextDouble();

    // Get the width of the room.
    System.out.print("Enter the width of room: ");
    double width = keyboard.nextDouble();
    
    //close keyboard
    keyboard.close();

    // Create RoomDimension and RoomCarpet objects.
    CarpetCalculatorProgram calculatorProgram = new CarpetCalculatorProgram();
    RoomDimension dimensions = calculatorProgram.new RoomDimension(length,
            width);
    RoomCarpet roomCarpet = calculatorProgram.new RoomCarpet(dimensions,
            CARPET_PRICE_PER_SQFT);

    // Print the object calling the toString
    System.out.println(roomCarpet);
}

Output

This program will display the carpet cost of a room.
Please enter the room's dimension in feet.
Enter the length of room: 10
Enter the width of room: 10
RoomCarpet [roomDimensions=RoomDimension [length=10.0, width=10.0], costOfCarpet=8.0, total cost=800.0]

Level Up

  • For each parameter passed as a contructor check the validity of each parameter. Regardless of which library you will want to check that the input is not null and value is positive. For instance, if you use guava you would use checkNotNull for not null.
  • Write a unit test for getArea and getTotalCost
  • Clean up output in RoomCarpet toString method