java-- 具有多态性和封装性的几何形状

java-- Geometric shapes with polymorphism and encapsulation

只是为了确保这是我的家庭作业。我需要实现 classes 来计算几何形状的面积和周长。

我需要的概述:我将在命令行中给出类似 "java ShapeTest Rectangle 5 5" 的内容,它应该给出该矩形的面积和周长。

这是我的代码:

Shape.java

public abstract class Shape {
public abstract double area();
public abstract double perimeter();
}

Rectangle.java

public class Rectangle extends Shape {
private double b;
private double a;

public Rectangle(){

}

public Rectangle(double a, double b) {
    this.a = a;
    this.b = b;
}

@Override
public double area(){
    return a *b;
}

@Override
public  double perimeter(){
    return 2*(a+b);
}

@Override
public String toString() {
    return "Rectangle{" +
            "a=" + a +
            " b=" + b +
            '}';
}
}

我有相似的圆形、三角形和Sqaure.java。 这是我的 ShapeTest.java

public class FormenTest {


public static void set(){
//I want something here


}

public static void main(String[] args) {

    Rectangle rectangle = new Rectangle(Character.getNumericValue((args[1].charAt(0))),Character.getNumericValue((args[2].charAt(0))) );

    if(args[0].equals("Rectangle")){
        System.out.println(rectangle.area());

        }
    }
}

现在,这种方法可以满足需要,但我认为这不是很好的方法。在 ShapeTest class 中的 set 方法中,我想生成稍后在 main 方法中使用的形状对象。任何有关优化代码和填充集方法的帮助将不胜感激。

您的主要方法可能如下所示:

public static Shape createShape(String[] args) {
    Shape s = null;
    if(args.length > 0) {
        switch(args[0]) {
            case "Rectangle":
                if(args.length > 2) {
                    s = new Rectangle(Double.parseDouble(args[1]), Double.parseDouble(args[2]));
                }
                break;
            case "Circle":
                if(args.length > 1) {
                    s = new Circle(Double.parseDouble(args[1]));
                }
                break;
            case "Triangle":
                //etc...
                break;
        }
    }
    return s;
}

public static void main(String[] args) {
    Shape s = createShape(args);

    if(s != null) {
        System.out.println("Area: " + s.area());
        System.out.println("Perimeter: " + s.perimeter());
    }
}

}

您当然会想要添加用户友好的异常处理。