初学者Java不需要参数构造函数错误

初学者Java不需要参数构造函数错误,java,constructor,compiler-errors,Java,Constructor,Compiler Errors,作为一个类的赋值,我试着创建一个简单的圆类,然后将它用作构造函数。 这是我的班级代码: public class Circle { private double radius; private double pi; public void setRadius(double rad) { radius = rad; } public double getRadius() { return radius; } public double ge

作为一个类的赋值,我试着创建一个简单的圆类,然后将它用作构造函数。 这是我的班级代码:

public class Circle
{
  private double radius;
  private double pi;

  public void setRadius(double rad)
  {
    radius = rad;
  }

  public double getRadius()
  {
    return radius;
  }

  public double getArea()
  {
    return pi * radius * radius;
  }

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

  public double getCircumference()
  {
    return 2 * pi * radius;
  }
}
下面是使用该类生成构造函数的程序:

import java.util.Scanner; //scanner class for input

  public class CircleDemo
{
  public static void main(String[]args)
  {
    double radiusIn; //gets radius from input

    Scanner keyboard=new Scanner(System.in); //activates scanner class in program

    System.out.print("Enter the radius of a circle: ");
    radiusIn=keyboard.nextDouble();

    Circle circularObject= new Circle(radiusIn);

    System.out.println("The circle's area is" + circularObject.getArea());
    System.out.println("The circle's diameter is" + circularObject.getDiameter());
    System.out.println("The circle's circumference is" + circularObject.getCircumference());
  }
}
我得到了一个错误: 错误:类循环中的构造函数循环不能应用于给定类型; 必需:无参数 发现:双 原因:实际参数列表和正式参数列表长度不同


我没有发现我的代码有任何问题,但我还是使用了老师给我们的示例。

你的circle类中没有构造函数

public Circle (something here) {}

您正在这里调用构造函数

Circle circularObject= new Circle(radiusIn);
但是在
循环中没有定义与您传入的参数匹配的构造函数。返回到
循环
类并定义接受
双参数的构造函数:

public Circle(double val)
{
    //Implementation
}

请注意,如果您没有为类提供显式构造函数,Java将自动为您提供一个空的实现,没有参数,供您使用的公共构造函数。一旦定义了第一个显式构造函数,默认构造函数就消失了,这意味着您必须手动重新定义它。

Java为您编写的每个类提供默认构造函数。您无法看到它,但它在那里,除非您使用任何所需的参数编写自己的参数,否则它将被调用

参数化构造函数最常用的实现之一如下所示:

double radius;
public Circle(double radius){
    this.radius = radius;
}
您不需要有相同的名称:

double radius;
public Circle(double i){
    radius = i;
}
但第一个版本被认为是最佳实践,应该是使用的版本。这当然适用于任何形式的参数化构造函数:

String name;
int age;
public Person(String name, int age){
    this.name = name;
    this.age = age;
}

请为Circle添加构造函数。修改后的代码为:

public class Circle 
{
  private double radius;
  private double pi;

  Circle(double x) 
  {
    this.radius = x;
  }

  public void setRadius(double rad) 
  {
    radius = rad;
  }

  public double getRadius() 
  {
    return radius;
  }

  public double getArea() 
  {
    return pi * radius * radius;
  }

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

  public double getCircumference() 
  {
    return 2 * pi * radius;
  }
}

与问题无关(已回答),但最好使用
Math.PI
而不是私有字段
PI
,该字段甚至还没有设置为PI的值。您没有给
PI
一个数学上使用的值。你认为产量会是多少?此外,
pi
的值是否会改变?构造函数不是必须的。一般来说,一个好主意:是的。必需:否@FoggyDay在他发布的代码片段中,
Circle circularObject=new Circle(radiusIn)他正在调用将值传递给构造函数的类,但他没有编写构造函数