在Java中创建用于计算面积和周长的子类Triangle时,某些值的结果不正确

时间:2017-07-31 06:57:01

标签: java inheritance subclass

我有一个赋值,要求我创建一个扩展GeometricObject的子类Triangle。我非常接近解决方案,但是我的周边方法存在问题。我遇到的问题是我的程序有时计算正确的周长,有时使用所有3个边的初始1.0值来计算周长。

这是说明: 三角类:您的代码文件夹包含一个名为GeometricObject的类。如果不以任何方式修改此类,请将其扩展为创建名为Triangle的新类。

Triangle类包含:

  • 一个名为sides的字段,由三个double值组成,表示side1,side2和side3。你必须使用一个数组;不要使用单个实例变量。每个元素的默认值应为1.0,以表示三角形的三个边。
  • 一个创建默认三角形的无参数构造函数:( new Triangle())。
  • 一个构造函数,它创建一个指定了三个边的Triangle :( new Triangle(1.0,2.0,1.5))。
  • 第三个构造函数,它取三个边,颜色以及是否应填充对象:( new Triangle(1.0,2.0,1.5,Color.RED,true))。
  • 一个名为getArea()的方法,它返回三角形的区域。 (使用Heron的公式在线查找公式。)
  • 名为getPerimeter()的方法。
  • 一个名为toString()的方法,它返回三角形的String描述。

这是我迄今为止所做的工作(我的代码):

import java.awt.Color;
public class Triangle extends GeometricObject
{
    private double side1 = 1.0;
    private double side2  = 1.0; 
    private double side3  = 1.0; 
    //no args constructor.
    public Triangle ()
    {
    }
     public Triangle (double side1, double side2, double side3)
    {
        this.side1 = side1;
        this.side2 = side2;
        this.side3 = side3;
    }

    public double getArea()
    {
        double s = ( side1 + side2 + side3 ) / 2.0 ; 
        double area = Math.sqrt ( s * ( s - side1) * (s - side2 ) * (s - side3)); 
        return area; 
    }
    public double getPerimeter()
    {
        return (side1 + side2 + side3);
    }
      public Triangle ( double side1 , double side2 , double side3 ,Color color, boolean statement )
    {
    }
    public String toString()
    {       
        return ( "t1.getArea() = " + getArea() + "\nt1.getPerimeter() = " + 
                getPerimeter() + "\nTriangle: side1 = " + 
            side1 + ", side2 = " + side2 + ", side3 = " + side3) ;
    }   

}

这是我从检查测试程序中得到的结果:

测试三角形

  • 类三角形定义为(0.5)
  • Class Triangle是公开的(0.5)
  • Class Triangle扩展GeometricObject(0.5)
  • 定义了三个构造函数。 (0.5)
  • 定义了默认(no-arg)构造函数。 (1.0)
  • 定义了三角形(double,double,double)构造函数。 (3.0)
  • 定义了三角形(double,double,double,Color,boolean)构造函数。 (1.0)
  • 简单三角形的正确周长。 (3.0)
  • 修正简单三角形的区域。 (3.0)
  • 3-arg三角形的正确周长,边长为5.39,3.56,8.44(2.0)
  • 3-arg三角形的正确区域,边长为10.82,4.36,10.47(2.0)
  • 3-arg三角形的正确周长,边长8.41,7.65,9.8(2.0)
  • 3-arg三角形的正确区域,边长2.63,4.51,1.41(2.0) X 3-arg三角形的边长不正确,边长为6.17,9.03,1.64 预期:其中16.84>但是:< 3.0> (2.0) X 3-arg三角形的边长不正确,边长为2.48,1.86,2.08 预期:其中6.42>但是:< 3.0> (2.0)
  • 正确toString为3-arg三角形,边4.66,7.65,1.83(3.0)------------------------------ -------------------------------------------- 86%(24.0 / 28.0考试通过)

这是GeometricObject的代码:

import java.awt.Color;
import java.util.Date;
public class GeometricObject
{
    private Color color = Color.WHITE;
    private boolean filled;
    private Date dateCreated;

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

    /**
     * Constructs a GeometricObject with a given color and filled state.
     * @param color the initial color of the object
     * @param filled whether the object is filled
     */
    public GeometricObject(Color color, boolean filled)
    {
        this(); // set the date
        this.color = color;
        this.filled = filled;
    }

    /** 
     * Return current color.
     * @return current color.
     */
    public Color getColor()
    {
        return color;
    }

    /**
     * Return true if the object is filled.
     * @return true if the object is filled. 
     */
    public boolean isFilled()
    {
        return filled;
    }

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

    /** 
     * Get dateCreated.
     * @return the date the object was created.
     */
    public Date getDateCreated()
    {
        return dateCreated;
    }

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

我知道这是一篇很长的帖子,我将非常感谢您的帮助,并提前感谢您的时间和帮助。

0 个答案:

没有答案