Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Problem 1: PART I: Create an abstract Java class named “TwoDFigure” in a package

ID: 3912822 • Letter: P

Question

Problem 1: PART I: Create an abstract Java class named “TwoDFigure” in a package named “GEOFIGURES”. This class has 3 attributes: • (1) dimension: a constant, public, of type byte, and set to value of 2 • (2) shape: protected, of type String (e.g.: circle, square, etc.) • (3) length unit: protected, of type String (e.g.: cm, m, ft, in) Class TwoDFigure declaration provides a default constructor, get-methods and set-methods for the variable attributes (shape and length unit), an abstract method to calculate perimeter (calculatePerimeter()), an abstract method to calculate area (calculateArea()), and another abstract method (displayFigureData()). PART II: Create a Java class named “Circle” in the same package, i.e. GEOFIGURES, that extends the above class TwoDFigure. Class Circle has 1 attribute: radius that should be defined as private. Class Circle declaration provides: • a default constructor, • another constructor that accepts radius as a parameter, • get-method and set-method for the attribute radius, • a method to get the diameter, • a method to calculate perimeter (calculatePerimeter()) that overrides the method of the same name of the superclass TwoDFigureand returns the value of perimeter • a method to calculate area (calculateArea()) that overrides the method of the same name of the superclass TwoDFigure and returns the value of area • a method (displayFigureData()) that overrides the method of the same name of the superclass TwoDFigure and prints out information to indicate that the figure is a circle and value of its radius. PART III: Create a Java class named “Rectangle” in the same package, i.e. GEOFIGURES, that extends the above class TwoDFigure. This class has 2 attributes: width and length that both should be defined as private. Class Rectangle declaration provides: • a default constructor, • another constructor that accepts its width and length as two different parameters, • get-methods and set-methods for the attributes width and length, • a method to calculate perimeter (calculatePerimeter()) that overrides the method of the same name of the superclass TwoDFigure and returns the value of perimeter • a method to calculate area (calculateArea()) that overrides the method of the same name of the superclass TwoDFigure and returns the value of area • a method (displayFigureData()) that overrides the method of the same name of the superclass TwoDFigure and prints out information to indicate that the figure is a rectangle and values of its width and length. PART IV: Write a Java program that can calculate and print out the perimeter and area of a 2D figure. This figure can be either a circle, or a rectangle. First, the program reads an input of a numeric figure code that identifies which type of 2D figure that the user wants to work with. The values of figure code are: • 1 for circle • 2 for rectangle The input of figure code must be verified to be sure that it is valid, i.e. can be only either 1 or 2. For the circle, the user enters data of the radius and then its measurement unit (“in” for inch, “ft” for feet, “cm” for centimeter, and “m” for meter) from the console. For the rectangle, the user enters data of width, data of length, and then the measurement unit (“in” for inch, “ft” for feet, “cm” for centimeter, and “m” for meter) from the console. The program should check to be sure that each numeric input is not negative and the measurement unit must be one among the listed-above units. The Java program is another Java class named “FigureCalculator” in the same package, i.e. GEOFIGURES. To provide a solution to the problem, it is expected that inheritance and polymorphism are used in the coding. IMPORTANT NOTES: The following Notepad files are expected to be submitted as the solution to Problem 1: • TwoDFigure.txt • Circle.txt • Rectangle.txt • FigureCalculator.txt

Explanation / Answer

import java.util.*;
//Package GEOFIGURES;


abstract class TwoDFigure // abstract base class
{
public static final byte dimension = 2;
protected String shape;
protected String lengthUnit;

// set and get methods
public void setShape(String shape)
{
this.shape = shape;
}
public String getShape()
{
return shape;
}
public void setLengthUnit(String lengthUnit)
{
this.lengthUnit = lengthUnit;
}
public String getUnitLength()
{
return lengthUnit;
}
public TwoDFigure()// default constructor
{
shape = " ";
lengthUnit = " ";
}

//abstract methods
abstract public double calculateArea();
abstract public double calculatePerimeter();
abstract public void displayFigureData();


}
class Rectangle extends TwoDFigure //derived class
{
private double length,width;
public Rectangle(String lengthUnit,double length, double width)//constructor
{
setLengthUnit(lengthUnit);
setShape("rectangle");
this.length = length;
this.width = width;
}
public double getLength()
{
return length;
}
public double getWidth()
{
return width;
}
//override base class abstract methods
public double calculateArea()
{
return length*width;
}
public double calculatePerimeter()
{
return 2*(length+width);
}

public void displayFigureData()
{
System.out.println("Figure is a "+getShape()+" Length : "+length+ " Width : "+width);
}
}
class Circle extends TwoDFigure
{
private double radius;
public Circle(String lengthUnit,double radius)
{
setLengthUnit(lengthUnit);
setShape("circle");
setLengthUnit("cm");
this.radius = radius;
}
public double getRadius()
{
return radius;
}
public double getDiameter()
{
return 2*radius;
}
public double calculateArea()
{
return 3.14*radius*radius;
}
public double calculatePerimeter()
{
return 2*3.14*radius;
}

public void displayFigureData()
{
System.out.println("Figure is a "+getShape()+" Radius : "+radius);
}
}



class FigureCalculator
{
public static void main (String[] args)
{
Scanner input = new Scanner(System.in);
System.out.println("Enter the code for the figure <1-circle , 2- rectangle>");
int code = input.nextInt();

if(code == 1)
{
System.out.println("Enter the radius of the circle : ");
double radius = input.nextDouble();
System.out.println("Enter the measurement unit : ");
String unit = input.next();
Circle c = new Circle(unit,radius);
c.displayFigureData();
System.out.println("Circle Area : "+c.calculateArea()+" Perimeter: "+c.calculatePerimeter());
}

else if(code == 2)
{
System.out.println("Enter the length and width of rectangle : ");
double length = input.nextDouble();
double width = input.nextDouble();
System.out.println("Enter the measurement unit : ");
String unit = input.next();
Rectangle r = new Rectangle(unit,length,width);
r.displayFigureData();
System.out.println("Rectangle Area : "+r.calculateArea()+" Perimeter: "+r.calculatePerimeter());
}
else
System.out.println("Invalid code");


}
}

Output:

Enter the code for the figure <1-circle , 2- rectangle>1
Enter the radius of the circle :3.4
Enter the measurement unit :cm
Figure is a circle Radius : 3.4
Circle Area : 36.2984 Perimeter: 21.352

Do ask if any doubt. Please upvote.