java用户定义的类和对象

时间:2014-04-07 14:39:36

标签: java class geometry computer-science

1.修改第一个构造函数以计算直径和面积。

2.将第二个构造函数修改为setRadius并计算区域而不调用setRadius

在课堂上制作两个新方法

我。一个findArea

II。 findDiameter。

修改testcircle以适应变化。

    public class Circle 
{
private double radius, area, diameter;
    public Circle() 

    {
        radius = 1;
        diameter = radius * 2;
        area = Math.PI * radius * radius;
    }
    public Circle(double myradius) 

    {
        myradius = radius;
        area = Math.PI * radius * radius;
    }

    public void setRadius(double aRadius)
    {
        this.radius = aRadius;
        diameter = radius * 2;
        area = Math.PI * radius * radius;
    }

    public void CalArea(double aArea)
    {
        area = Math.PI * radius * radius;
    }

    public void CalDiameter(double aDiameter)
    {
        diameter = radius * 2;
    }

     public double getRadius()
    {
        return radius;
    }
    public double getDiameter()
    {
        return diameter;
    }
    public double getArea()
    {
       return area;
    } 
}        


    public class TestCircle {

public static void main(String[] args) 
{
    Circle circle1; //Declaring an object(instance) of the class Circle.
        double myRadius, myDiameter, myArea;

        circle1 = new Circle();  

        myRadius = circle1.getRadius();
        System.out.println(myRadius);

        circle1.setRadius(5);
        myRadius = circle1.getRadius();
        System.out.println(myRadius);

        myDiameter = circle1.getDiameter();
        System.out.println(myDiameter);

        myArea = circle1.getArea();
        System.out.println(myArea);

        Circle circle2;

        circle2 = new Circle(2.5);

        myRadius = circle2.getRadius();
        System.out.println(myRadius);

        myDiameter = circle2.getDiameter();
        System.out.println(myDiameter);

        myArea = circle2.getArea();
        System.out.println(myArea);       
     }
}

我完成了第一项任务,但是在没有调用setRadius的情况下计算区域对我来说似乎有点棘手,或者我以错误的方式进行操作。非常感谢帮助/建议。

更新

玩弄它我认为我发现了我的问题

    public class Circle 
    {
    private double radius, area, diameter;
    public Circle() 
    {
        radius = 1;
        diameter = radius * 2;
        area = Math.PI * radius * radius;
    }
    public Circle(double myradius) 
    {
        this.radius = myradius;
    }

    public void setRadius(double aRadius)
    {
        this.radius = aRadius;
        diameter = radius * 2;
        area = Math.PI * radius * radius;
    }

    public double findDiameter() 
      {
        return radius*2;
      }

    public double findArea() 
    {
        return Math.PI * radius * radius;
    }

     public double getRadius()
    {
        return radius;
    }
    public double getDiameter()
    {
        return diameter;
    }
    public double getArea()
    {
       return area;
    } 
    }

然后我对主要的

进行了必要的修改

1 个答案:

答案 0 :(得分:0)

这个家庭作业练习意味着教你关于某个对象的状态,以及如何避免冗余

我认为:目标是

  1. 能够计算直径和面积,并将其存储在对象中
  2. 摆脱冗余状态并在需要时计算值
  3. 圆圈有一个自由属性(半径)和两个派生属性(直径和面积),可以在半径已知时随时计算。 这意味着您可以只存储半径,并实现findArea / findDiameter方法,以便从半径计算结果,然后返回:

    public double findDiameter() {
        return radius*2;
    }
    
    public double findArea() {
        return Math.PI * radius * radius;
    }
    

    注意(命名约定):前缀get表示可以本地以及廉价方式访问该值。当计算或加载该值很昂贵时,请使用不同的前缀(这样您通常会在使用相同值时了解成本,并可将其存储为中间结果)。这就是为什么在这个例子中写入的方法以find为前缀(虽然我个人使用不同的前缀,看起来像是通过搜索来检索数据,并且在这里的具体案例我认为计算方法足够便宜,可以使用get前缀。