gpt4 book ai didi

java - 类里面的数学没有带入对象

转载 作者:行者123 更新时间:2023-12-01 21:49:24 24 4
gpt4 key购买 nike

我必须编写一个具有 Circle 类的程序,该程序通过从 main 中的新圆对象接受 r 参数来计算圆的面积和周长。我给它输入了半径值 14。这就是它应该输出的内容:

***** Circle *****
radius 14.0
area 615.75164
circumference 87.96452

但是我得到了这个

***** Circle *****
radius 14.0
area 0.0
circumference 0.0

为什么会发生这种情况以及如何解决它?我获得了在 java 中工作的代码的整体外壳,我必须保留它的大部分内容,所以虽然我很欣赏就更好的方法来构建事物和制作这个程序的建议的意图一般来说,老师希望我这样做。我唯一不确定的是如何使用 setRadius(),以及我是否应该在类的顶部声明 r。

package shapedemo;

class Circle {
private double radius;
private double circumference;
private double area;
private double r;

// constructors
public Circle(){
radius = 1;
}
public Circle(double r) {
radius = r;
}

// setters and getters
public void setRadius(double radius){
this.radius = radius;
}
public double getRadius(){
return radius;
}

// other methods
public double calcArea() {
area = Math.PI * r * r;
return area;
}
public double calcCircumference(){
circumference = Math.PI * 2 * r;
return circumference;
}

// display method
public void display() {
/*blank line
***** Circle *****
radius nnnn.nn
area nnnn.nn
circumference nnnn.nn
blank line
*/
System.out.println("\n***** Circle *****\nradius " + radius + "\narea " + area + "\ncircumference " + circumference + "\n");
}
}

public class ShapeDemo {

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Circle circle1 = new Circle(14);
circle1.display();
}

}

最佳答案

仅当您调用适当的计算方法(calcAreacalcCircumference)时,才会设置您的 areacircumference 变量>)。您没有调用它们,因此它们的默认值为 0。

您可以在 main 方法中修复此问题:

public static void main(String[] args) {
Circle circle = new Circle(14);
circle.calcArea();
circle.calcCircumference();
circle.display();
}

...虽然您必须修复您的方法以使用radius而不是r,因为您从未设置r

我个人认为最好将逻辑移至构造函数中使用方法按需计算,而不是为它们提供字段。 p>

第一种方法,在构造函数中:

final class Circle {
private final double radius;
private final double circumference;
private final double area;

public Circle() {
this(1); // Delegate to other constructor
}

public Circle(double r) {
radius = r;
area = Math.PI * radius * radius;
circumference = Math.PI * 2 * radius;
}

public void display() {
System.out.println(
"\n***** Circle *****" +
"\nradius " + radius +
"\narea " + area +
"\ncircumference " + circumference + "\n");
}
}

第二种方法,让方法计算值:

final class Circle {
private final double radius;

public Circle() {
this(1); // Delegate to other constructor
}

public Circle(double r) {
radius = r;
}

public double getRadius() {
return radius;
}

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

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

public void display() {
System.out.println(
"\n***** Circle *****" +
"\nradius " + radius +
"\narea " + getArea() +
"\ncircumference " + getCircumference() + "\n");
}
}

在这两种情况下,我都将其设为不可变类型 - 虽然您可以保持它可变,但在第一种情况下,这意味着重新计算面积和周长。在这种情况下,您可能希望构造函数仅调用 setRadius() 并让该方法执行所有计算。

例如:

final class Circle {
private double radius;
private double circumference;
private double area;

public Circle() {
this(1); // Delegate to other constructor
}

public Circle(double r) {
setRadius(r);
}

public void setRadius(double r) {
radius = r;
area = Math.PI * radius * radius;
circumference = Math.PI * 2 * radius;
}

public double getRadius() {
return radius;
}

public double getArea() {
return area;
}

public double getCircumference() {
return circumference;
}

public void display() {
System.out.println(
"\n***** Circle *****" +
"\nradius " + radius +
"\narea " + area +
"\ncircumference " + circumference + "\n");
}
}

关于java - 类里面的数学没有带入对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35426148/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com