如何使用 类 和 Java 中的方法

How to use classes and methods in Java

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

实现下面 UML 中显示的名为 Cylinder 的 class。构造函数接受并初始化圆柱体的半径和高度,而 accessorsmutators 允许在对象构建后更改它们。 class 还包括计算和 return 圆柱体的体积和表面积的方法。最后,它包含一个 toString 方法,该方法 return 是形状的名称、半径和高度。创建一个实例化 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();

    }
}

public class 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();

感谢您的帮助!

getset 方法的示例:

 double getRadius() {
    return radius;
 }

 void setRadius(r) {
    radius = r;
 }

The constructor Cylinder() is undefined for - Cylinder cylinder1 = new Cylinder();

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

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

Stringbuilder can't be resolved to a type for - StringBuilder sb = new Stringbuilder();

StringBuilder其实就是classjava.lang.StringBuilder。将此文本放在文件顶部以帮助它解析名称。

import java.lang.StringBuilder;

What I really don't understand is how to use the 'get' and 'set' methods.

getters和setters的目的是为了封装。它们允许您获取或设置 class' 变量的值,而无需将它们声明为 public.

例如,如果您有

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。顾名思义,getters "get" 变量。

public double getHeight() {
    return height;
}

而 setter "set" 变量。

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

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

Additionally, I'm not completely sure how to implement the toString method.

至于toString()方法如何实现,只需要return一个String即可。但至于 String 包含什么,没有硬性规定。一个好的开始是 return 半径和高度,就像你所做的那样。

The constructor Cylinder() is undefined for - 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 can't be resolved to a type for - StringBuilder sb = new Stringbuilder();

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