1

我需要编写一个程序来计算圆的面积,我似乎一切正常,除非我运行程序并输入面积计算结果为零的值。

public class Circle {

    private double radius;
    private double area;

    public Circle() {
        radius = 0;
        area = 0;
    }

    public Circle(double radius) {
        this.radius = radius;
    }

    public double getRadius() {
        return radius;
    }

    public void setRadius(double radius) {
        this.radius = radius;
    }

    public double getArea() {
        return area;
    }

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

    public String toString() {
        return "The radius of the circle is: " + radius + ", and the area is: " + area;
    }
}

我需要更改什么,以便当我的测试代码调用 toString 时它会输出计算面积?

4

6 回答 6

3

您应该有一个基于当前半径计算面积的方法。不应设置区域。

public class Circle {
    private double radius;

    public Circle() {
        radius = 0;
    }

    public Circle(double radius) {
        this.radius = radius;
    }

    public double getRadius() {
        return radius;
    }

    public void setRadius(double radius) {
        this.radius = radius;
    }

    public double getArea() {
        return calculateArea();
    }

    private double calculateArea() {
        return radius * radius * Math.PI;
    }

    public String toString() {
        return "The radius of the circle is: " + radius + ", and the area is: "
                + calculateArea();
    }
}

如果您确实希望将区域存储在变量中,则应在设置半径时对其进行更新。它不应该与“setArea”独立设置。否则,你很容易出现不一致。此外,还有来自 Josh Bloch 的“Effective Java”的注释。虽然你的 toString 应该利用这个“计算区域”而不是复制计算,但你不应该让 toString 在你的公共 API 中调用任何东西。例如,如果您覆盖 getArea,这将是一个问题,这意味着它的行为与您的 Circle.toString 预期的不同。这就是我将私有“calculateArea”放在那里的原因。

于 2013-11-03T18:46:46.547 回答
0

通过radius而不是areasetArea方法中:

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

完整代码 - http://pastebin.com/jggRrUFd

于 2013-11-03T19:30:34.620 回答
0

这是我的 Circle_Math 类版本,具有条目验证以及完成工作所需的最少行数/操作和内存空间。如果您愿意,请发表评论。

public class circle {
    static double rad;

    public circle() {
        rad = 0;
    }

    public static void setRad() {
        Scanner sc = new Scanner(System.in);

        do {
            while (!sc.hasNextDouble()) {
                sc.next();// this code is to skip the exception created 
            }
            rad = sc.nextDouble();
        } while (rad < 0);

        System.out.println("radius value is:" + rad);

    }

    public static double getCirclearea() {
        return rad * rad * Math.PI;
    }

    public static double getCircumference() {
        return 2 * Math.PI * rad;
    }

}
于 2015-05-19T17:50:06.710 回答
0
import java.util.Scanner;
public class Circle {
    // variable PI is readable only;
    // constant value
    public static final double PI = 3.14;
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner input = new Scanner(System.in);

        System.out.print("Enter raduis: ");
        double raduis = input.nextDouble();

        double area = PI * raduis * raduis;
        System.out.print("Circle area = " + area);

    }

}
于 2016-02-08T07:26:47.147 回答
0
public static double getAreaOfCircle(int radius){
        return Math.PI*radius*radius;
    }
于 2017-02-16T05:34:43.740 回答
-2

您最初将 设置area为 0。您创建了一个方法来更改它,但从未调用它。所以叫吧。改变这个:

public String toString() {
    return "The radius of the circle is: " + radius + ", and the area is: " + area;
}

对此:

public String toString() {
    setArea(area); // change the value of the area
    return "The radius of the circle is: " + radius + ", and the area is: " + area;
}
于 2013-11-03T18:55:24.150 回答