做一个学校项目,无法获得区域计算权

时间:2017-09-15 03:06:18

标签: java

我正在为学校开设Java实验室。目的是计算圆的周长,面积和半径r给出一个边长为x和n长的多边形。

我的代码:

public class RegularPolygon {

    private int myNumSides;         // # of sides
    private double mySideLength;    // length of side
    private double myR;             // radius of circumscribed circle
    private double myr;             //radius of inscribed circle


    /**
     * This is a default constructor creating a 3 sided polygon (triangle)
     * This means that myNumSides should be initialized to 3
     */
    public RegularPolygon() {

        this.myNumSides = 3;
    }


    /**
     * This is a parameter constructor with one int parameter and one double parameter
     * @param numSides This is a parameter that sets the # of sides for object RegularPolygon   
     * @param sideLength This is a parameter for the length of each side in object RegularPolygon
     */
    public RegularPolygon(int numSides, double sideLength) {

        this.myNumSides = numSides;
        this.mySideLength = sideLength;
    }


    /**
     * Private Method to calculate the radius of the inscribed circle
     * @return Nothing
     */
    private void calcr() {

        this.myr = 0.5 * this.getSideLength() * (1/(Math.tan(Math.PI / this.getNumside())));
    }


    /**
     * Private Method to calculate the radius of the circumscribed circle
     * @return Nothing
     */
    private void calcR() {

        this.myR = 1 / 2 * this.getSideLength() * (1 / (Math.sin(Math.PI / this.getNumside())));
    }


    /**
     * This is a method that calculates the Vertex Angle. The Vertex Angle is assigned to to the variable q
     * @return double Returns the double value of q, the vertex angle
     */
    public double vertexAngle() {

        double q = ((this.getNumside() - 2) / this.getNumside()) * Math.toRadians(180);
        return q;
    }


    /**
     * Method that calculates the perimeter of the polygon. The perimeter is assigned to the double variable perimeter
     * @return double Returns the double value of the perimeter
     */
    public double Perimeter() {

        double perimeter = this.getSideLength() * this.getNumside();
        return perimeter;
    }


    /**
     * Method that calculates the area of the polygon RegularPolygon
     * @return double Returns the double value of the area
     */
    public double Area() {

        double area = 1 / 2 * this.getNumside() * Math.pow(this.getR(), 2) * Math.sin(2 * Math.PI / this.getNumside());
        return area;
    }


    /**
     * Getter method that returns the value of myNumSides
     * @return int Value of myNumSides
     */
    public int getNumside() {

        return myNumSides;
    }


    /**
     * Getter Method that returns the value of mySideLength
     * @return double Value of mySideLength
     */
    public double getSideLength() {

        return mySideLength;
    }


    /**
     * Getter Method that returns the value myR
     * @return double Value of circumscribed circle myR
     */
    public double getR() {

        return myR;
    }


    /**
     * Getter Method that returns the value of inscribed circle myr
     * @return double Value of inscribed circle myr
     */
    public double getr() {

        return myr;
    }
}

除了calcR和calcr方法之外,一切都是正确的。由于某种原因,返回的值始终为0.0。不确定我是否正确使用数学方法或其他东西。

这是我的测试代码:

   public class PolygonDriver {

        public static void main(String[] args) {

            RegularPolygon poly = new RegularPolygon(4, 10);
            System.out.println(poly.Area());
            System.out.println(poly.getR());
            System.out.println(poly.Perimeter());

        }
 }

运行后,我得到: 0.0 0.0 40.0

我的方法calcR()和calcr()有什么问题?

2 个答案:

答案 0 :(得分:1)

calcr()和calcR在代码中的任何地方都没有被调用,因此myr和myR永远不会被设置,所以你得到的初始值为0.0

答案 1 :(得分:1)

除了不调用calcr()和calcR()之外,你应该将Area()中的1/2和calcR()更改为0.5,以便使用正确的数据类型。