Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Java计算圆的面积_Java_Constructor_Geometry - Fatal编程技术网

用Java计算圆的面积

用Java计算圆的面积,java,constructor,geometry,Java,Constructor,Geometry,我需要写一个程序来计算一个圆的面积,我似乎什么都做对了,除了当我运行程序并输入数值时,面积计算结果为零 public class Circle { private double radius; private double area; public Circle() { radius = 0; area = 0; } public Circle(double radius) { this.radius

我需要写一个程序来计算一个圆的面积,我似乎什么都做对了,除了当我运行程序并输入数值时,面积计算结果为零

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时,它将输出一个计算面积?

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

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();
    }
}

如果确实希望将面积存储在变量中,则应在设置半径时对其进行更新。它不应该独立于“设置区域”设置。否则,您很容易受到不一致性的影响。此外,还有Josh Bloch的“高效Java”中的一个注释。虽然您的toString应该利用这个“计算区域”,而不是复制计算,但您不应该在公共API中调用任何toString。例如,如果您对getArea进行了重写,这将是一个问题,这意味着它的行为将与Circle.toString所期望的不同。这就是为什么我把私有的“calculateArea”放在那里。

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

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();
    }
}

如果确实希望将面积存储在变量中,则应在设置半径时对其进行更新。它不应该独立于“设置区域”设置。否则,您很容易受到不一致性的影响。此外,还有Josh Bloch的“高效Java”中的一个注释。虽然您的toString应该利用这个“计算区域”,而不是复制计算,但您不应该在公共API中调用任何toString。例如,如果您对getArea进行了重写,这将是一个问题,这意味着它的行为将与Circle.toString所期望的不同。这就是为什么我将私有的“calculateArea”放在那里。

您最初将
区域设置为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;
}

您最初将
区域设置为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;
}

通过
半径
而不是
设置区域
方法中的
区域

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

对于完整代码-

设置区域
方法中通过
半径
而不是
区域

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

对于完整的代码-

这是我的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;
    }

}
公共类圈子{
静态双rad;
公众圈(){
rad=0;
}
公共静态void setRad(){
扫描仪sc=新的扫描仪(System.in);
做{
而(!sc.hastNextDouble()){
sc.next();//此代码将跳过创建的异常
}
rad=sc.nextDouble();
}而rad<0;
System.out.println(“半径值为:“+rad”);
}
公共静态双getCirclearea(){
返回rad*rad*Math.PI;
}
公共静态双GetPercentration(){
返回2*Math.PI*rad;
}
}

这是我的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;
    }

}
公共类圈子{
静态双rad;
公众圈(){
rad=0;
}
公共静态void setRad(){
扫描仪sc=新的扫描仪(System.in);
做{
而(!sc.hastNextDouble()){
sc.next();//此代码将跳过创建的异常
}
rad=sc.nextDouble();
}而rad<0;
System.out.println(“半径值为:“+rad”);
}
公共静态双getCirclearea(){
返回rad*rad*Math.PI;
}
公共静态双GetPercentration(){
返回2*Math.PI*rad;
}
}

你有没有打电话给
设置区域
?您的设计是错误的。我没有看到任何获取输入以将其馈送到
循环
实例的部件。我们也需要查看它。您的
setArea
方法没有设置class
area
变量。使用
this.area=…
,否则将覆盖输入参数。面积和半径应相互关联。如果将面积设置为给定值,则还应设置半径。如果你设置了半径,它也应该设置面积。否则,您将有一个半径为1、面积为10000的圆,而您的圆将不再是圆。您是否调用了
setArea
?您的设计是错误的。我没有看到任何获取输入以将其馈送到
循环
实例的部件。我们也需要查看它。您的
setArea
方法没有设置class
area
变量。使用
this.area=…
,否则将覆盖输入参数。面积和半径应相互关联。如果将面积设置为给定值,则还应设置半径。如果你设置了半径,它也应该设置面积。否则,你会有一个半径为1、面积为10000的圆,你的圆就不再是圆了,这甚至不会编译。在toString()方法中修改对象的状态是没有意义的。@JBNizet是的,我读错了方法。我想
setArea(area)
返回了一个字符串。我更新了我的答案。我不想修改他的课程,这在很大程度上是没有意义的;我只是想解决他所说的问题,那根本不可能。在toString()方法中修改对象的状态是没有意义的。@JBNizet是的,我读错了方法。我想
setArea(area)
返回了一个字符串。我更新了我的答案。我不想修改他的课程,这在很大程度上是没有意义的;我只是想解决他说的问题。欢迎来到StackOverflow!你能改进你的代码格式吗?