0

GeometricObjectを拡張するTriangleという名前のクラスを設計します(以下に示すコード)。Triangleクラスには、次のものが含まれます。•side1、side2、side3という名前の3つのdoubleデータフィールド。デフォルト値は1.0で、三角形の3つの辺を示します。•デフォルトの三角形を作成する引数なしのコンストラクター。•指定されたside1、side2、およびside3で三角形を作成するコンストラクター。•3つのデータフィールドすべてのアクセサメソッド。•この三角形の面積を返すgetArea()という名前のメソッド。•この三角形の周囲を返すgetPerimeter()という名前のメソッド。•三角形の文字列の説明を返すtoString()という名前のメソッド。

public class GeometricObject {
  private String color = "white";
  private boolean filled;
  private java.util.Date dateCreated;

  /** Construct a default geometric object */
  public GeometricObject() {
    dateCreated = new java.util.Date();
  }

  /** Construct a geometric object with the specified color 
    *  and filled value */
  public GeometricObject(String Color, boolean filled) {
    dateCreated = new java.util.Date();
    this.color = color;
    this.filled = filled;
  }

  /** Return color */
  public String getColor() {
    return color;
  }

  /** Set a new color */
  public void setColor(String color) {
    this.color = color;
  }

  /** Return filled. Since filled is boolean, 
     its get method is named isFilled */
  public boolean isFilled() {
    return filled;
  }

  /** Set a new filled */
  public void setFilled(boolean filled) {
    this.filled = filled;
  }

  /** Get dateCreated */
  public java.util.Date getDateCreated() {
    return dateCreated;
  }

  /** Return a string representation of this object */
  public String toString() {
    return "created on " + dateCreated + "\ncolor: " + color + 
      " and filled: " + filled;
  }
}

壊す

public class Triangle extends GeometricObject {

double side1 = 1.0;
double side2 = 1.0;
double side3 = 1.0;

public Triangle() {
side1=0.0;
side2=0.0;
side3=0.0;
}

public Triangle(double a, double b, double c) {
side1 = a;
side2 = b;
side3 = c;
}

public void show() {
System.out.println(side1+","+side2+","+side3+",");
}

public void calcArea(){
double s = 0.0, Num = 0.0;
s = 0.5*(side1+side2+side3);
Num = s*((s-side1)*(s-side2)*(s-side3));

}
public double getArea(){
return( 1/2*(side1*side2*side3));
}

public double getPerimeter(){
return (side1 + side2 + side3);
}

@Override
public String toString(){
      return "Triangle Information:+  “\nside1 = " + side1 + "\nside2 = " + side2 +
  "\nside3 = " + side3 + "\ncolor = " + getColor() + "\nfilled  =" + isFilled(); 
  }
}

壊す

public class DemoTriangle {
  public static void main(String[] args) {
    Triangle triangle = new Triangle(1, 1.5, 1);
    System.out.println(triangle);

    triangle.setColor("yellow");
    triangle.setFilled(true);

    System.out.println("The area is " + triangle.getArea());
    System.out.println("The perimeter is " + triangle.getPerimeter());
    System.out.println(triangle);
  }


}

コードを実行していますが、何らかの理由で、三角形の実際の面積ではなく、常に面積を「0.0」として返しています。私は何が欠けていますか?

4

1 に答える 1

0

面積を計算し、それを 2 つの異なる関数で「取得」しています。getArea() メソッドで面積を計算して返すだけでよいと思います (実際、あなたの calcArea メソッドは何もしません - 面積を計算し (間違って追加するかもしれません)、何もしません)。

面積の式は、calcArea() の変数「Num」で計算したものの平方根です。別個の関数 getArea() と calcArea() を使用する代わりに、そのコードを getArea() に入れ、calcArea() メソッドを取り除きます。

getArea() メソッドから面積として 0 を取得する理由は、整数除算で 0 に評価される「1/2」で数式を開始するためです (整数除算では剰余が破棄されることに注意してください)。これを修正するには、「1.0/2.0」にするか、単に「2.0」で割ります。(もちろん、getArea() で使用する式は正しくないことを覚えておいてください!)

于 2012-12-11T20:00:25.963 に答える