【问题标题】:How to use classes and methods in Java如何在 Java 中使用类和方法
【发布时间】:2015-10-03 21:41:49
【问题描述】:

我对 Java 和编码还很陌生,但在 Java 材料的这一点上,我还没有遇到任何问题。我真正无法理解的是类和方法的实际工作方式。在过去的几个小时里,我一直在尝试实现这一点,但无济于事:

实现下面 UML 中显示的名为 Cylinder 的类。构造函数接受并初始化圆柱体的半径和高度,而 accessorsmutators 允许在对象构造后更改它们。该类还包括计算和返回圆柱体的体积和表面积的方法。最后,它包含一个返回形状名称、半径和高度的 toString 方法。创建一个实例化 4 个 Cylinder 对象(任何参数)的 main 方法,用toString() 显示它们,更改每个参数(您的选择),然后再次显示它们。

UML:

这是我目前拥有的代码:

class Cylinder {
    private double radius;
    private double height; 


    // Method #1
    private void rad (){

    }

    // Constructor
    public Cylinder (double radius, double height){
        this.radius = radius; 
        this.height = height;
    }


    // Method #2 for calculating volume.
    double calcVolume (){
        double volume = Math.PI * Math.pow(radius, 2) * height; 
        return volume; 
    }

    // Method #3 for calculating surface area.
    double calcArea (){
        double area = (2 * Math.PI * radius * height) + (2 * Math.PI * Math.pow(radius, 2));
        return area;
    }

    // toString method.
    public String toString (){
        StringBuilder sb = new Stringbuilder();
        sb.append(radius).append(height);
        return sb.toString();

    }
}

公开课 Murray_A03Q1 {

public static void main(String[] args) {

    Cylinder cylinder1 = new Cylinder(5, "can");
    System.out.println(cylinder1);

    Cylinder cylinder2 = new Cylinder(6, "cup");

    Cylinder cylinder3 = new Cylinder(7, "jar");

    Cylinder cylinder4 = new Cylinder(8, "paper roll");
}       

}

我真正不明白的是如何使用 'get' 和 'set' 方法。另外,我不完全确定如何实现 toString 方法。

以下我不知道如何纠正的错误是:

  1. 构造函数 Cylinder() 未定义 - 气缸cylinder1 = new Cylinder();

  2. Stringbuilder 无法解析为 - StringBuilder sb = new Stringbuilder();

感谢您的帮助!

【问题讨论】:

    标签: class methods constructor get tostring


    【解决方案1】:

    我真正不明白的是如何使用'get'和'set'方法。

    getter 和 setter 的目的是为了封装。它们允许您获取或设置类变量的值,而无需将它们声明为公共的。

    例如,如果你有

    public double radius;
    public double height;
    

    您将能够以身份访问它们

    cylinder1.radius = 1;
    cylinder2.height = 10;
    int a = cylinder3.radius;
    int b = cylinder3.height + cylinder4.radius;
    

    等等

    现在如果我们有

    private double radius;
    private double height;
    

    上面的代码会失败。这就是为什么我们需要 getter 和 setter。顾名思义,getter “获取”变量。

    public double getHeight() {
        return height;
    }
    

    当设置器“设置”变量时。

    public void setHeight(double height) {
        this.height = height;
    }
    

    至于为什么我们会这样做,theres a lot of information on that.

    另外,我不完全确定如何实现 toString 方法。

    至于如何实现toString()方法,它所要做的就是返回一个String。但至于String 包含的内容,并没有硬性规定。一个好的开始是返回半径和高度,就像你所做的那样。

    构造函数 Cylinder() 未定义 - Cylinder cylinder1 = new Cylinder();

    你的构造函数是public Cylinder (double radius, double height)。但是,您正在尝试制作一个 intString 的圆柱体。

    Cylinder cylinder1 = new Cylinder(5, "can");
    

    要么

    • 将构造函数更改为public Cylinder(double radius, String name);
    • 用两个双精度值、一个半径和一个高度来实例化您的圆柱体。 例如

      Cylinder cylinder1 = new Cylinder(1.0, 2.0);
      

    Stringbuilder 无法解析为 -StringBuilder sb = new Stringbuilder(); 的类型

    这里唯一的问题是您忘记将b 大写。这是StringBuilder 不是Stringbuilder

    【讨论】:

      【解决方案2】:

      getset 方法的示例:

       double getRadius() {
          return radius;
       }
      
       void setRadius(r) {
          radius = r;
       }
      

      构造函数 Cylinder() 未定义 - Cylinder cylinder1 = new 圆柱体();

      有东西试图调用默认构造函数(没有参数的构造函数)。您可以找出调用此错误的确切位置,或者添加默认构造函数:

      Cylinder() {
          this.radius = 0;
          this.height = 0;
      }
      

      Stringbuilder 无法解析为 -StringBuilder sb = new Stringbuilder(); 的类型

      StringBuilder 实际上是类java.lang.StringBuilder。将此文本放在文件顶部以帮助解析名称。

      import java.lang.StringBuilder;
      

      【讨论】:

        猜你喜欢
        • 2012-05-16
        • 2012-03-30
        • 2015-02-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-11
        相关资源
        最近更新 更多