2017-07-07 27 views
0

只是为了确保这是我的家庭作业。我需要实现类来计算面积和几何形状的周长。java--具有多态性和封装的几何形状

我需要什么概述:我会在命令行中给出类似“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类里面的设定方法我想生成我以后在主要方法中使用的形状对象。将不胜感激关于优化代码和填充集方法的任何帮助。

+0

您的“等号”方法是错误的。它应该接受'Object'作为参数。你的'main'方法没有被编译,因为'square'没有被定义。看起来像你不知道你想要什么。 – talex

+0

这个问题清楚地说“我有类似的Circle,Triangle和Square.java。让我编辑我的问题,并删除从主要的平方,如果它迷惑人 – mangochaser

回答

2

你的主要方法可以是这个样子:

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()); 
    } 
} 

}

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

+0

谢谢它肯定是有效和高效,有没有什么办法来创建形状对象在ShapeTest.java中的另一种方法? – mangochaser

+0

你是说你想要将形状创建代码移动到一个单独的方法,并将你的cmd行参数传递给该方法吗? – Steve

+0

是的,我想用不同的方法创建一个形状对象 – mangochaser