Java构造函数:错误";“实际参数列表和正式参数列表长度不同”;

Java构造函数:错误";“实际参数列表和正式参数列表长度不同”;,java,oop,object,constructor,Java,Oop,Object,Constructor,我一直在拼命地尝试让这段代码正常工作。这是我第一次使用对象/构造函数(我是一名新程序员),这让我很困惑。我会完全诚实;我不知道是什么问题。我已经尝试了很多东西,所以这个代码非常混乱。我也受够了,开始再次编写第二个代码,因为与第一个代码不一样的原因,尽管该代码的结构略有不同。我将发布这两次尝试,希望有人能看到我的错误。谢谢 尝试1: class Circle { private static double r; public static double rd; public

我一直在拼命地尝试让这段代码正常工作。这是我第一次使用对象/构造函数(我是一名新程序员),这让我很困惑。我会完全诚实;我不知道是什么问题。我已经尝试了很多东西,所以这个代码非常混乱。我也受够了,开始再次编写第二个代码,因为与第一个代码不一样的原因,尽管该代码的结构略有不同。我将发布这两次尝试,希望有人能看到我的错误。谢谢

尝试1:

class Circle
{
    private static double r;
    public static double rd;
    public double Circle( double r, double rd )
 {
        r = rd;
        return r;
 }
    public double calCircumference(double r)
 {
        return 2*Math.PI*r;
}
    public static double calArea(double r)
{
        return Math.PI*r*r;
}

}
class CircleApp
{
    public static void main( String[] args )
{
        double rd = Double.parseDouble( args[0] );
        System.out.println( "Circle radius = " + rd );

        // create an object of Circle with the radius rd
        Circle circle1 = new Circle();
        double cir = circle1.calCircumference();
        double area = circle1.calArea();
        System.out.println("Circumference = " + cir);
        System.out.println("Area = " + area);
    }
}
class Circle
{   
    public double rd = Double.parseDouble( args[0] );   
    private double r;

    public void Circle( double rd )
 {
    double r = rd;
 }
    private double calCircumference(double r)
 {
        return 2*Math.PI*r;
}
    public double calArea()
{
        return Math.PI*r*r;
}
}
class CircleApp2
{
    public static void main( String[] args )
{
        System.out.println( "Circle radius = " + rd );
        // create an object of Circle with the radius rd
        Circle circle1 = new Circle( rd);
        double cir = circle1.calCircumference();
        double area = circle1.calArea();
        System.out.println("Circumference = " + cir);
        System.out.println("Area = " + area);
}
}
尝试2:

class Circle
{
    private static double r;
    public static double rd;
    public double Circle( double r, double rd )
 {
        r = rd;
        return r;
 }
    public double calCircumference(double r)
 {
        return 2*Math.PI*r;
}
    public static double calArea(double r)
{
        return Math.PI*r*r;
}

}
class CircleApp
{
    public static void main( String[] args )
{
        double rd = Double.parseDouble( args[0] );
        System.out.println( "Circle radius = " + rd );

        // create an object of Circle with the radius rd
        Circle circle1 = new Circle();
        double cir = circle1.calCircumference();
        double area = circle1.calArea();
        System.out.println("Circumference = " + cir);
        System.out.println("Area = " + area);
    }
}
class Circle
{   
    public double rd = Double.parseDouble( args[0] );   
    private double r;

    public void Circle( double rd )
 {
    double r = rd;
 }
    private double calCircumference(double r)
 {
        return 2*Math.PI*r;
}
    public double calArea()
{
        return Math.PI*r*r;
}
}
class CircleApp2
{
    public static void main( String[] args )
{
        System.out.println( "Circle radius = " + rd );
        // create an object of Circle with the radius rd
        Circle circle1 = new Circle( rd);
        double cir = circle1.calCircumference();
        double area = circle1.calArea();
        System.out.println("Circumference = " + cir);
        System.out.println("Area = " + area);
}
}

任何帮助都将不胜感激。另外,因为我认为我的编码可能会让你们中的大多数人想把我的头扯下来,所以请不要批评其中的任何部分。我只是在这里开始学习过程,所以任何反馈/批评都会非常有用。再次感谢

构造函数不是
void
方法。这个

public void Circle( double rd )
应该是

public Circle( double rd ){
    this.r = rd;
}
private double calCircumference()
那么下一个问题是

private double calCircumference(double r)
应该是

public Circle( double rd ){
    this.r = rd;
}
private double calCircumference()

没有意义,这不在
main
中。把所有的东西放在一起

class Circle {
    private double r;

    public Circle(double rd) {
        this.r = rd;
    }

    public double calCircumference() {
        return 2 * Math.PI * r;
    }

    public double calArea() {
        return Math.PI * r * r;
    }
}
然后

class CircleApp2 {
    public static void main(String[] args) {
        double rd = Double.parseDouble(args[0]);
        System.out.println("Circle radius = " + rd);
        // create an object of Circle with the radius rd
        Circle circle1 = new Circle(rd);
        double cir = circle1.calCircumference();
        double area = circle1.calArea();
        System.out.println("Circumference = " + cir);
        System.out.println("Area = " + area);
    }
}

这里有各种各样的问题

首先,在这两个版本中,您都声明了方法而不是构造函数。这是一个方法声明:

公共双圈(双r,双rd)
这是一个构造函数声明:

公众圈(双右,双右)
构造函数不指定返回类型

接下来,在您的第一次尝试中,有一条注释说您正在创建一个半径为
rd
的圆,但实际上并没有传入
rd

//创建半径为rd的圆对象
圆圈1=新圆圈();
那应该是

圆圈1=新圆圈(rd);
。。。但在尝试1中,在方法-that-should-be-a-constructor中也有两个参数,其中只需要1

在尝试2中,您试图使用
CircleApp2
中的
rd
变量,但它仅在
圆圈中声明。。。该声明将不起作用,因为它试图使用
args
,而args只存在于
main

一个问题是,您在尝试构建之前编写了太多的代码。在无法创建实例的情况下,编写计算周长和面积的方法是没有意义的。从最少的代码开始,进行编译,然后添加到其中。以下是我对起点的建议:

//我通常赞同“设计继承还是禁止继承”,
//因此类被声明为final,但您可能不需要担心
//当你刚开始的时候太多了。
公开期末班
{
//我建议尽可能将字段设置为最终字段,并给出它们
//比“r”或“rd”更有意义的名称。(在
//一个圆的上下文,但“半径”更好。
私人最终双半径;
公共圈(双半径){
这个半径=半径;
}
}
公开期末班{
公共静态void main(字符串[]args){
double radius=double.parseDouble(args[0]);
圆=新圆(半径);
}
}
现在,要查看的代码要少得多-因此,如果您不理解某些内容,则可以更容易地确定它是什么。

CalcircumReference(双r)
希望给出一个
double
。这很奇怪,因为
Circle
实例已经有一个半径字段。为什么不使用这个?