2017-07-07 64 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