【问题标题】:How to build a "Circle" object that lets the user determine the radius?如何构建一个让用户确定半径的“圆”对象?
【发布时间】:2015-02-24 21:46:11
【问题描述】:

我正在学习面向对象的编程课程,但在理解如何构建一个让用户声明半径是什么的圆形对象时遇到了一些困难。

我创建了一个数据类,并在其中放入了我的实例变量、getter 和 setter 方法、构造函数,然后是基本的计算函数方法来计算给定半径的圆的面积和周长。 这是那个类:

package shapesoo;
public class CircleDataClass {
private double radius;

public double getRadius() {
    return radius;
    }

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

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

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

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

然后,我正在创建一个测试类,它使用给定的半径构建圆,并在我的 main 方法中创建新的圆对象:

CircleDataClass myCircle = new CircleDataClass(radius);

我没有在这个测试类的任何地方声明半径,所以这就是我收到运行时错误的原因。但我想要的是用户输入我在构造函数中拥有的那个半径参数的值,然后将该半径传递给这个圆形对象。我是否在我的主类中创建一个单独的方法来询问半径的值?我想我对 getters/setters/constructors 正在做什么以及如何将半径变量传递给不同的类感到困惑。

编辑:如果我把它放进去,我的数据类中的实例变量是否被使用了?

public static void main(String[] args) {

    String shapeType = getShape();

    if (shapeType.equalsIgnoreCase("Circle")){
        String r = JOptionPane.showInputDialog("What is the radius: ");
        double radius = Double.parseDouble(r);
        CircleDataClass myCircle = new CircleDataClass(radius);

    }
}

我知道如何在不使用面向对象原则的情况下做到这一点,并且我知道这对你们中的许多人来说似乎很简单,但我希望能提供任何帮助。

【问题讨论】:

  • 基本思想是您需要有某种形式的用户输入,以便用户决定大小。您可以尝试从 System.in 或 GUI 对话框中读取文本。
  • 在您的编辑中:是的,使用了您的 circle 实例的 radius 数据,它包含作为参数传递给构造函数的值的副本。

标签: java oop object constructor


【解决方案1】:

我没有在这个测试类的任何地方声明半径,所以这就是我收到运行时错误的原因。

好的,这很正常

但我想要的是用户输入我在构造函数中的那个半径参数的值,然后将该半径传递给这个圆形对象。我是否在我的主类中创建一个单独的方法来询问半径的值?

是的。基本上,您可以读取标准输入供用户输入数字,然后用它实例化圆圈。请参阅Scanner 类。

我想我对 getter/setter/constructor 正在做什么以及如何将半径变量传递给不同的类感到困惑。

  • 构造函数用于创建和初始化一个类的实例。
  • getter(s) 提供对实例属性的只读访问权限。在您的情况下,如果您想检查特定圆实例的半径是多少,可以通过myCircle.getRadius() 获得。
  • setter(s) 的作用是改变一个实例,即改变内部属性。拥有 setter 可能不是一个好习惯,当需要更改属性时创建一个新对象会更好。这实际上取决于您的设计和环境。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多