【问题标题】:Learning to build an object in Java学习用 Java 构建对象
【发布时间】:2016-10-25 02:13:12
【问题描述】:

您好,我在理解这个作业时遇到了一点麻烦。几周前我刚刚开始使用 Java,我们刚刚开始构建类,所以这里是问题所在。

问题:我在使用第一个构造函数和 setRadius 时遇到了问题,我通常不知道该怎么做。我是否输入setRadius 并将该值发送到该构造函数。我该如何处理构造函数?

编写一个具有以下字段的 Circle 类:

  • 半径:双精度
  • PI:使用值 3.14159 初始化的最终双精度数

该类应具有以下方法:

  • 构造函数:接受圆的半径作为参数。
  • 构造函数:将半径字段设置为 0.0 的无参数构造函数。
  • setRadius:半径字段的修改器方法。
  • getRadius:半径字段的访问器方法。
  • getArea:返回圆的面积,计算公式为area = PI * radius * radius。
  • getDiameter:返回圆的直径,计算公式为直径=半径*2。
  • getCircumference:返回圆的周长,计算公式为圆周=2 * PI * 半径。

编写一个演示 Circle 类的程序,询问用户圆的半径,创建一个 Circle 对象,然后报告圆的面积、直径和周长。

所以我写了这段代码:

public class CircleClass {

    final double PI = 3.14159;
    double radius;

    // this constructor allows the input of the user 
    public CircleClass (double rad){
        radius = rad;
    }

    // this is the default constructor in case of no user input
    public CircleClass (){
        radius = 0;
    }

    // this method allows you to set the radius
    public void setRadius (double input){
        //CircleClass input;
        radius = input;
    }

    // value returners //

    // returns radius
    public double getRadius (){
        return radius;
    }

    // returns area
    public double getArea (){
        return PI * radius * radius;
    }

    // returns diameter
    public double getDiameter(){
        return radius * 2;
    }

    // returns circumference 
    public double getCircumference(){
        return 2 * PI * radius;
    }

}

所以我对第一种方法感到困惑,如果你看到一些东西并且你认为我应该知道,我可能在这个程序的其他地方犯了错误,请告诉我。

【问题讨论】:

  • 该程序基于用户输入,但用户输入无法发生,我假设您还没有达到程序的那个点?因为这是 setRadius() 方法所依赖的,因为它将半径设置为输入。
  • 不,我没有,我只是把课程放在一起
  • 嗯,这对于您理解 setRadius() 方法是必要的。我将对代码进行一些更改,并尝试解释您的问题。
  • 我仍然不知道第一个构造函数是做什么的。我如何访问它的论点?如果我做对了
  • 我会告诉你,一秒钟

标签: java class object


【解决方案1】:

当你创建一个类的实例/对象时,这基本上调用了类的构造函数(默认/参数化)构造函数。

CircleClass circleClass = new CircleClass(10);

这将调用类的参数化构造函数(代码中的第一个构造函数),并将半径的值设置为 10。

CircleClass circleClass = new CircleClass();

这将调用类的默认构造函数(无参数,代码中的第二个构造函数)并将半径的值设置为 0。

如果要使用setRadius(double) 方法设置半径值,则应使用类的对象来完成。因为,可以使用类的对象访问类的方法。

可以这样做:

Scanner in = new Scanner(System.in);
CircleClass circleClass = new CircleClass(); // calls the no-arg constructor
System.out.println("Enter the radius of the circle : ");
double radius = in.nextDouble();
circleClass.setRadius(radius); // this sets the radius of the circle using the method setRadius(double) of the class

如果方法被定义为公共静态方法,也可以在 java 中使用类名调用方法。考虑代码片段:

public class Class1{
   public static final void PrintMessage(){
      System.out.println("Just prints a message");
   }
}

方法 PrintMessage(void) 可以使用类名调用如下:

Class1.PrintMessage(); // Calls the method PrintMessage(void)

此外,鉴于问题陈述,我没有看到您的代码中有任何错误。

但是,您可能希望为您的类变量使用“this”变量。很多时候,我们可能会用完有意义的变量名称(在您的情况下,您在 setRadius(double) 方法中使用 input 作为半径的变量名称,这对其他程序员可能没有多大意义)。但是,如果您使用“this”变量,则可以避免这种情况。

public class CircleClass{
   double radius; // class variable

   public CircleClass(double radius){
      this.radius = radius; // this.radius -> refers to the class variable
   }
   public void setRadius(double radius){
      this.radius = radius; // radius -> refers to the variable passed as argument
   }
}

只是一个小提示,效果很好。

【讨论】:

    【解决方案2】:

    你可以创建两个 CircleClass 类的实例。

    CircleClass uncircle = new CircleClass(); //Default constructor
    CircleClass circle = new CircleClass(5.7); 
    

    方法uncircle.getRadius() 将返回0。我建议你尝试circle.getRadius() 来检查输出。

    【讨论】:

      【解决方案3】:

      通过创建 main 方法(实际对您创建的程序执行某些操作的方法),您可能会得到更好的理解:

      首先在您的 java 文档顶部(在类之外)包含以下导入。这将允许您使用内置的 java 方法来处理用户输入:

      import java.util.Scanner;
      

      然后在main方法中:

       public static void main(String args[]) {
          Scanner input = new Scanner(System.in);
          CircleClass cc = new CircleClass(input.nextDouble());
      
          System.out.println(cc.getArea());
      
      
        }
      

      在 main 方法中,首先创建一个 Scanner 对象,我们将其命名为“input”(来自我们导入的 Scanner 类)。这将允许您接受用户输入。

      然后创建一个 CircleClass 对象(我将其命名为 cc,您可以随意命名)。该对象直接引用您的类中的构造函数,如与类同名的方法 (CircleClass())。现在,由于您的构造函数采用数据类型为 double 的参数,因此我们还需要在创建对象时提供“double”参数。我们将其设置为用户输入(input.nextDouble(),

      然后在底部我只是打印出您创建的返回方法之一,在本例中为 getArea()。但请注意,您放置了 cc.getArea(),因为“cc”是 CircleClass 对象的名称。创建 CircleClass 对象允许我们以这种方式使用 CircleClass 类内部的方法。

      希望这不会变得太混乱。

      【讨论】:

      • 那不是一秒钟,@LinusAronsson。
      猜你喜欢
      • 2017-03-24
      • 1970-01-01
      • 2021-11-23
      • 1970-01-01
      • 1970-01-01
      • 2011-01-30
      • 1970-01-01
      • 2016-06-19
      • 2015-10-14
      相关资源
      最近更新 更多