2017-07-13 57 views
0

Javaクラス用のプロジェクトで、形状領域/周囲の電卓を作成しています。私はタイトルに記載されているコンストラクターのエラーを取得し続けます。 Shape.javaクラスのファイルには、より多くのコードも含まれています。コンストラクタShapeクラスは、指定された型には適用できません

メイン:

package project_3; 


public class Main { 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 

     Shape circle = new Shape(1); 
     Shape triangle = new Shape(3); 
     Shape rectangle = new Shape(4); 
     Shape polygon = new Shape(8); 

     circle.performCalculations(6.28); 
     triangle.performCalculations(3, 4, 5); 
     rectangle.performCalculations(4, 7); 
     polygon.performCalculations(5); 

     System.out.println("Ima Java Programmer"); 
     System.out.println("Project 3"); 
     System.out.println(" "); 

     System.out.println("Shape" + "Area" + "Perimeter"); 
     System.out.println("---------" + "---------" + "---------"); 

     System.out.println("Circle" + circle.area + circle.perimeter); 
     System.out.println("Triangle" + triangle.area + triangle.perimeter); 
     System.out.println("Rectangle" + rectangle.area + rectangle.perimeter); 
     System.out.println("Polygon" + polygon.area + polygon.perimeter); 

    } 
} 

Shape.Javaコード:

package project_3; 

public class Shape { 


    int numSides; 
    double area; 
    char name; 
    double perimeter; 
    int p; 
    int sideA; 
    int sideB; 
    int sideC; 
    double radius; 

    public Shape(int numSides, double area, double perimeter, char name) { 

    } 

    public double calcArea(double radius) { 

     area = 3.14 * Math.pow(radius, 2); 

     return area; 
    } 

    public int calcArea(int length) { 

     area = (Math.pow(numSides, 2) * length)/(4 * Math.tan(180/length)); 
     return (int)area; 

    } 

    public int calcArea(int length, int width) { 

     area = length * width; 
     return (int)area; 
    } 

    public int calcArea(int sideA, int sideB, int sideC) { 

     p = (sideA + sideB + sideC)/2; 
     area = Math.sqrt(p * (p - sideA) * (p - sideB) * (p - sideC)); 
     return (int)area; 
    } 

    public double calcPerimeter(double radius) { 

     perimeter = 2 * 3.14 * Math.pow(radius, 2); 
     return perimeter; 
    } 

    public int calcPerimeter(int length) { 

     perimeter = length * numSides; 
     return (int)perimeter; 
    } 

    public int calcPerimeter(int length, int width) { 

     perimeter = 2 * length + 2 * width; 
     return (int)perimeter; 
    } 

    public int calcPerimeter(int sideA, int sideB, int sideC) { 

     perimeter = sideA + sideB + sideC; 
     return (int)perimeter; 
    } 

    public void performCalculations(double radius) { 

     //How do we perform the actual calculations? Correct? 
     calcArea(1); 
     calcPerimeter(6.28); 
    } 

    @Override 
    public String toString() { 
     return super.toString(); //To change body of generated methods, choose Tools | Templates. 
    } 


} 

何かアドバイスは非常に参考になります。私はGoogleが答えを見つけようとしていることを強く批判してきており、答えを出すことはできません。

+1

シェイプのコンストラクタには4つのパラメータが必要ですが、1つしか提供していません... – MadProgrammer

答えて

0

あなたは

...さらにそのコンストラクタが、実際には何もしません。現在、あなただけの、このコンストラクタを持って

public Shape(int numSides, double area, double perimeter, char name) { 

} 

次のシグネチャ

public Shape(int var) { 
    numSides = var; 
} 

を持つコンストラクタを作成する必要があります

名前変数にcharの代わりに文字列を使用することをお勧めします。

最後に、シェイプの親クラスを作成し、Triangle、Square、Circleなどの他のクラスで、そのクラスを拡張して、周囲と面積を計算する独自のメソッドを実装する必要があります。

1

あなたの問題は、コンストラクタである:

public Shape(int numSides, double area, double perimeter, char name) {}

このコンストラクタは、4つのパラメータ(numSides、面積、周囲長と名前を)持っています。

Shape circle = new Shape(1); 
Shape triangle = new Shape(3); 
Shape rectangle = new Shape(4); 
Shape polygon = new Shape(8); 

次の2つのオプションがあります:しかし、あなたのメインクラスに一つだけの引数を提供している

public Shape(int argument)

  • は一つの引数でShapeクラスに1つのコンストラクタを作成します。
  • または、作成するすべてのオブジェクトの4つの引数を渡します。前述の回答に加えて
0

、あなたはOverloadクラスShapeのコンストラクタにする必要があります。

のように、インスタンス化するたびに2つの初期化されたShapeクラスを受け入れることができる2つのコンストラクタを持つことができます。これはあなたのコンストラクタで与えられた引数に、あなたのオブジェクトのインスタンス変数を設定します

public Shape(int numSides, double area, double perimeter, char name) { 
     this.numSides = numSides; 
     this.area = area; 
     this.perimeter = perimeter; 
     this.name = name; 
} 

public Shape(int i){ 
    // initialize here with 1 parameter only 
} 

//make your name to String since you could only store 1 letter on char and not a good practice 
public Shape(int numSides, double area, double perimeter, String name){ 
    // initialize here with 4 parameters 
} 
0

またにあなたのコンストラクタを変更する必要があります。

関連する問題