// Part 4: OVERLOAD / OVERRIDE (circle the correct term) the Shape's perimeter() and // area() methods.
import java.util.Scanner ;
private final int NUMBER_OF_SIDES;
NUMBER_OF_SIDES = 0 ;
}
public Shape ( int sides
) { NUMBER_OF_SIDES = sides;
}
public int getNumberOfSides( ) {
return NUMBER_OF_SIDES;
}
public double area( ) {
return 0 ;
}
public double perimeter( ) {
return 0 ;
}
}
private double x;
private double y;
}
public Point ( double x,
double y
) { this .x = x;
this .y = y;
}
public double getX( ) {
return x;
}
public double getY( ) {
return y;
}
}
class Circle
extends Shape { private double radius;
public Circle( ) {
}
public Circle
( int sides,
double radius,
Point center
) { super ( sides) ;
this .radius = radius;
this .center = center;
}
return "Circle with " + getNumberOfSides( ) + " side, radius = " + radius + ", center = (" + center.getX ( ) + "," + center.getY ( ) + "), area = " + area( ) + ", circumference = " + circumference( ) ;
}
public double area( ) {
return 3.14 * radius * radius;
}
public double circumference( ) {
return 2 * 3.14 * radius;
}
}
private double length;
private double width;
}
public Rectangle ( int sides,
double length,
double width
) { super ( sides) ;
this .length = length;
this .width = width;
}
return "Rectangle with " + getNumberOfSides( ) + " sides, length = " + length + ", width = " + width + ", area = " + area( ) + ", perimeter = " + perimeter( ) ;
}
public double area( ) {
return length * width;
}
public double perimeter( ) {
return 2 * ( length + width) ;
}
}
class Triangle
extends Shape { private double sideA;
private double sideB;
private double sideC;
private double base;
private double height;
public Triangle( ) {
}
public Triangle( int sides, double sideA, double sideB, double sideC, double base, double height) {
super ( sides) ;
this .sideA = sideA;
this .sideB = sideB;
this .sideC = sideC;
this .base = base;
this .height = height;
}
return "Triangle with 3 sides, side lengths = " + sideA + "," + sideB + "," + sideC + ", base = " + base + ", height = " + height + ", area = " + area( ) + ", perimeter = " + perimeter( ) ;
}
public double area( ) {
return 0.5 * base * height;
}
public double perimeter( ) {
return sideA + sideB + sideC;
}
}
public class Main {
public static void main
( String [ ] args
) { Scanner s
= new Scanner
( System .
in ) ; for ( int i = 0 ; i < 3 ; i++ ) {
System .
out .
print ( "Number of sides (1=Circle, 3=Triangle, 4=Rectangle): " ) ; int sides = s.nextInt ( ) ;
if ( sides == 1 ) {
double radius = s.nextDouble ( ) ;
double x = s.nextDouble ( ) ;
double y = s.nextDouble ( ) ;
shapes
[ i
] = new Circle
( sides, radius,
new Point ( x, y
) ) ; }
else if ( sides == 3 ) {
double sideA = s.nextDouble ( ) ;
double sideB = s.nextDouble ( ) ;
double sideC = s.nextDouble ( ) ;
double base = s.nextDouble ( ) ;
double height = s.nextDouble ( ) ;
shapes[ i] = new Triangle( sides, sideA, sideB, sideC, base, height) ;
}
else if ( sides == 4 ) {
double length = s.nextDouble ( ) ;
double width = s.nextDouble ( ) ;
shapes
[ i
] = new Rectangle ( sides, length, width
) ; }
}
for ( int i = 0 ; i < 3 ; i++ ) {
if ( shapes[ i] instanceof Circle)
System .
out .
println ( ( ( Circle
) shapes
[ i
] ) .
toStr ( ) ) ; else if ( shapes[ i] instanceof Triangle)
System .
out .
println ( ( ( Triangle
) shapes
[ i
] ) .
toStr ( ) ) ; }
}
}
Ly8gUGFydCA0OiAgICBPVkVSTE9BRCAgIC8gICBPVkVSUklERSAgICAgKGNpcmNsZSB0aGUgY29ycmVjdCB0ZXJtKSB0aGUgU2hhcGUncyBwZXJpbWV0ZXIoKSBhbmQgLy8gYXJlYSgpIG1ldGhvZHMuCgppbXBvcnQgamF2YS51dGlsLlNjYW5uZXI7CgpjbGFzcyBTaGFwZSB7CiAgICBwcml2YXRlIGZpbmFsIGludCBOVU1CRVJfT0ZfU0lERVM7CiAgICBwdWJsaWMgU2hhcGUoKSB7CiAgICAgICAgTlVNQkVSX09GX1NJREVTID0gMDsKICAgIH0KICAgIHB1YmxpYyBTaGFwZShpbnQgc2lkZXMpIHsKICAgICAgICBOVU1CRVJfT0ZfU0lERVMgPSBzaWRlczsKICAgIH0KICAgIHB1YmxpYyBpbnQgZ2V0TnVtYmVyT2ZTaWRlcygpIHsKICAgICAgICByZXR1cm4gTlVNQkVSX09GX1NJREVTOwogICAgfQogICAgcHVibGljIGRvdWJsZSBhcmVhKCkgewogICAgICAgIHJldHVybiAwOwogICAgfQogICAgcHVibGljIGRvdWJsZSBwZXJpbWV0ZXIoKSB7CiAgICAgICAgcmV0dXJuIDA7CiAgICB9Cn0KCgpjbGFzcyBQb2ludCB7CiAgICBwcml2YXRlIGRvdWJsZSB4OwogICAgcHJpdmF0ZSBkb3VibGUgeTsKICAgIHB1YmxpYyBQb2ludCgpIHsKICAgIH0KICAgIHB1YmxpYyBQb2ludChkb3VibGUgeCwgZG91YmxlIHkpIHsKICAgICAgICB0aGlzLnggPSB4OwogICAgICAgIHRoaXMueSA9IHk7CiAgICB9CiAgICBwdWJsaWMgZG91YmxlIGdldFgoKSB7CiAgICAgICAgcmV0dXJuIHg7CiAgICB9CiAgICBwdWJsaWMgZG91YmxlIGdldFkoKSB7CiAgICAgICAgcmV0dXJuIHk7CiAgICB9Cn0KCgoKY2xhc3MgQ2lyY2xlIGV4dGVuZHMgU2hhcGUgewogICAgcHJpdmF0ZSBkb3VibGUgcmFkaXVzOwogICAgcHJpdmF0ZSBQb2ludCBjZW50ZXI7CiAgICBwdWJsaWMgQ2lyY2xlKCkgewogICAgfQogICAgcHVibGljIENpcmNsZShpbnQgc2lkZXMsIGRvdWJsZSByYWRpdXMsIFBvaW50IGNlbnRlcikgewogICAgICAgIHN1cGVyKHNpZGVzKTsKICAgICAgICB0aGlzLnJhZGl1cyA9IHJhZGl1czsKICAgICAgICB0aGlzLmNlbnRlciA9IGNlbnRlcjsKICAgIH0KICAgIHB1YmxpYyBTdHJpbmcgdG9TdHIoKSB7CiAgICAgICAgcmV0dXJuICJDaXJjbGUgd2l0aCAiICsgZ2V0TnVtYmVyT2ZTaWRlcygpICsgIiBzaWRlLCByYWRpdXMgPSAiICsgcmFkaXVzICsgIiwgY2VudGVyID0gKCIgKyBjZW50ZXIuZ2V0WCgpICsgIiwiICsgY2VudGVyLmdldFkoKSArICIpLCBhcmVhID0gIiArIGFyZWEoKSArICIsIGNpcmN1bWZlcmVuY2UgPSAiICsgY2lyY3VtZmVyZW5jZSgpOwogICAgfQogICAgcHVibGljIGRvdWJsZSBhcmVhKCkgewogICAgICAgIHJldHVybiAzLjE0ICogcmFkaXVzICogcmFkaXVzOwogICAgfQogICAgcHVibGljIGRvdWJsZSBjaXJjdW1mZXJlbmNlKCkgewogICAgICAgIHJldHVybiAyICogMy4xNCAqIHJhZGl1czsKICAgIH0KfQoKCgpjbGFzcyBSZWN0YW5nbGUgZXh0ZW5kcyBTaGFwZSB7CiAgICBwcml2YXRlIGRvdWJsZSBsZW5ndGg7CiAgICBwcml2YXRlIGRvdWJsZSB3aWR0aDsKICAgIHB1YmxpYyBSZWN0YW5nbGUoKSB7CiAgICB9CiAgICBwdWJsaWMgUmVjdGFuZ2xlKGludCBzaWRlcywgZG91YmxlIGxlbmd0aCwgZG91YmxlIHdpZHRoKSB7CiAgICAgICAgc3VwZXIoc2lkZXMpOwogICAgICAgIHRoaXMubGVuZ3RoID0gbGVuZ3RoOwogICAgICAgIHRoaXMud2lkdGggPSB3aWR0aDsKICAgIH0KICAgIHB1YmxpYyBTdHJpbmcgdG9TdHIoKSB7CiAgICAgICAgcmV0dXJuICJSZWN0YW5nbGUgd2l0aCAiICsgZ2V0TnVtYmVyT2ZTaWRlcygpICsgIiBzaWRlcywgbGVuZ3RoID0gIiArIGxlbmd0aCArICIsIHdpZHRoID0gIiArIHdpZHRoICsgIiwgYXJlYSA9ICIgKyBhcmVhKCkgKyAiLCBwZXJpbWV0ZXIgPSAiICsgcGVyaW1ldGVyKCk7CiAgICB9CiAgICBwdWJsaWMgZG91YmxlIGFyZWEoKSB7CiAgICAgICAgcmV0dXJuIGxlbmd0aCAqIHdpZHRoOwogICAgfQogICAgcHVibGljIGRvdWJsZSBwZXJpbWV0ZXIoKSB7CiAgICAgICAgcmV0dXJuIDIgKiAobGVuZ3RoICsgd2lkdGgpOwogICAgfQp9CgoKY2xhc3MgVHJpYW5nbGUgZXh0ZW5kcyBTaGFwZSB7CiAgICBwcml2YXRlIGRvdWJsZSBzaWRlQTsKICAgIHByaXZhdGUgZG91YmxlIHNpZGVCOwogICAgcHJpdmF0ZSBkb3VibGUgc2lkZUM7CiAgICBwcml2YXRlIGRvdWJsZSBiYXNlOwogICAgcHJpdmF0ZSBkb3VibGUgaGVpZ2h0OwogICAgcHVibGljIFRyaWFuZ2xlKCkgewogICAgfQogICAgcHVibGljIFRyaWFuZ2xlKGludCBzaWRlcywgZG91YmxlIHNpZGVBLCBkb3VibGUgc2lkZUIsIGRvdWJsZSBzaWRlQywgZG91YmxlIGJhc2UsIGRvdWJsZSBoZWlnaHQpIHsKICAgICAgICBzdXBlcihzaWRlcyk7CiAgICAgICAgdGhpcy5zaWRlQSA9IHNpZGVBOwogICAgICAgIHRoaXMuc2lkZUIgPSBzaWRlQjsKICAgICAgICB0aGlzLnNpZGVDID0gc2lkZUM7CiAgICAgICAgdGhpcy5iYXNlID0gYmFzZTsKICAgICAgICB0aGlzLmhlaWdodCA9IGhlaWdodDsKICAgIH0KICAgIHB1YmxpYyBTdHJpbmcgdG9TdHIoKSB7CiAgICAgICAgcmV0dXJuICJUcmlhbmdsZSB3aXRoIDMgc2lkZXMsIHNpZGUgbGVuZ3RocyA9ICIgKyBzaWRlQSArICIsIiArIHNpZGVCICsgIiwiICsgc2lkZUMgKyAiLCBiYXNlID0gIiArIGJhc2UgKyAiLCBoZWlnaHQgPSAiICsgaGVpZ2h0ICsgIiwgYXJlYSA9ICIgKyBhcmVhKCkgKyAiLCBwZXJpbWV0ZXIgPSAiICsgcGVyaW1ldGVyKCk7CiAgICB9CiAgICBwdWJsaWMgZG91YmxlIGFyZWEoKSB7CiAgICAgICAgcmV0dXJuIDAuNSAqIGJhc2UgKiBoZWlnaHQ7CiAgICB9CiAgICBwdWJsaWMgZG91YmxlIHBlcmltZXRlcigpIHsKICAgICAgICByZXR1cm4gc2lkZUEgKyBzaWRlQiArIHNpZGVDOwogICAgfQp9CgoKCnB1YmxpYyBjbGFzcyBNYWluIHsKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICBTaGFwZVtdIHNoYXBlcyA9IG5ldyBTaGFwZVszXTsKICAgICAgICBTY2FubmVyIHMgPSBuZXcgU2Nhbm5lcihTeXN0ZW0uaW4pOwogICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCAzOyBpKyspIHsKICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludCgiTnVtYmVyIG9mIHNpZGVzICgxPUNpcmNsZSwgMz1UcmlhbmdsZSwgND1SZWN0YW5nbGUpOiAiKTsKICAgICAgICAgICAgaW50IHNpZGVzID0gcy5uZXh0SW50KCk7CiAgICAgICAgICAgIGlmKHNpZGVzID09IDEpIHsKICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIlJhZGl1czogIik7CiAgICAgICAgICAgICAgICBkb3VibGUgcmFkaXVzID0gcy5uZXh0RG91YmxlKCk7CiAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCJYOiAiKTsKICAgICAgICAgICAgICAgIGRvdWJsZSB4ID0gcy5uZXh0RG91YmxlKCk7CiAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCJZOiAiKTsKICAgICAgICAgICAgICAgIGRvdWJsZSB5ID0gcy5uZXh0RG91YmxlKCk7CiAgICAgICAgICAgICAgICBzaGFwZXNbaV0gPSBuZXcgQ2lyY2xlKHNpZGVzLCByYWRpdXMsIG5ldyBQb2ludCh4LCB5KSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZihzaWRlcyA9PSAzKSB7CiAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCJTaWRlIEE6ICIpOwogICAgICAgICAgICAgICAgZG91YmxlIHNpZGVBID0gcy5uZXh0RG91YmxlKCk7CiAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCJTaWRlIEI6ICIpOwogICAgICAgICAgICAgICAgZG91YmxlIHNpZGVCID0gcy5uZXh0RG91YmxlKCk7CiAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCJTaWRlIEM6ICIpOwogICAgICAgICAgICAgICAgZG91YmxlIHNpZGVDID0gcy5uZXh0RG91YmxlKCk7CiAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCJCYXNlOiAiKTsKICAgICAgICAgICAgICAgIGRvdWJsZSBiYXNlID0gcy5uZXh0RG91YmxlKCk7CiAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCJIZWlnaHQ6ICIpOwogICAgICAgICAgICAgICAgZG91YmxlIGhlaWdodCA9IHMubmV4dERvdWJsZSgpOwogICAgICAgICAgICAgICAgc2hhcGVzW2ldID0gbmV3IFRyaWFuZ2xlKHNpZGVzLCBzaWRlQSwgc2lkZUIsIHNpZGVDLCBiYXNlLCBoZWlnaHQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYoc2lkZXMgPT0gNCkgewogICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludCgiTGVuZ3RoOiAiKTsKICAgICAgICAgICAgICAgIGRvdWJsZSBsZW5ndGggPSBzLm5leHREb3VibGUoKTsKICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIldpZHRoOiAiKTsKICAgICAgICAgICAgICAgIGRvdWJsZSB3aWR0aCA9IHMubmV4dERvdWJsZSgpOwogICAgICAgICAgICAgICAgc2hhcGVzW2ldID0gbmV3IFJlY3RhbmdsZShzaWRlcywgbGVuZ3RoLCB3aWR0aCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IDM7IGkrKykgewogICAgICAgICAgICBpZihzaGFwZXNbaV0gaW5zdGFuY2VvZiBDaXJjbGUpCiAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKChDaXJjbGUpc2hhcGVzW2ldKS50b1N0cigpKTsKICAgICAgICAgICAgZWxzZSBpZihzaGFwZXNbaV0gaW5zdGFuY2VvZiBUcmlhbmdsZSkKICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigoKFRyaWFuZ2xlKXNoYXBlc1tpXSkudG9TdHIoKSk7CiAgICAgICAgICAgIGVsc2UgaWYoc2hhcGVzW2ldIGluc3RhbmNlb2YgUmVjdGFuZ2xlKQogICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCgoUmVjdGFuZ2xlKXNoYXBlc1tpXSkudG9TdHIoKSk7CiAgICAgICAgfQogICAgfQp9CgoKCg==
stdout
Number of sides (1=Circle, 3=Triangle, 4=Rectangle): Radius: X: Y: Number of sides (1=Circle, 3=Triangle, 4=Rectangle): Radius: X: Y: Number of sides (1=Circle, 3=Triangle, 4=Rectangle): Radius: X: Y: Circle with 1 side, radius = 1.0, center = (1.0,1.0), area = 3.14, circumference = 6.28
Circle with 1 side, radius = 1.0, center = (1.0,1.0), area = 3.14, circumference = 6.28
Circle with 1 side, radius = 1.0, center = (1.0,1.0), area = 3.14, circumference = 6.28