当前位置: 首页 > 知识库问答 >
问题:

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

闻人栋
2023-03-14

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

尝试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);
    }
}

尝试2:

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个答案

有权
2023-03-14

这里有各种问题。

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

public double Circle( double r, double rd )

这是一个构造函数声明:

public Circle( double r, double rd )

构造函数未指定返回类型。

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

// create an object of Circle with the radius rd
Circle circle1 = new Circle();

那应该是

Circle circle1 = new Circle(rd);

…但是在尝试1中,您还在方法-应构造函数中获得了两个参数,其中您只需要1。

在尝试2中,您正在尝试使用CirlearApp2中的row变量,但它仅在Circle中声明…并且该声明不起作用,因为它正在尝试使用仅存在于main中的args

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

// I generally go along with the idea of "design for inheritance or prohibit it",
// hence the class being declared as final, but you probably don't need to worry about
// that too much when you're starting out.
public final class Circle
{
    // I'd recommend making fields final where possible, and giving them
    // more meaningful names than "r" or "rd". (It's not *too* bad in the
    // context of a circle, but "radius" is still better.
    private final double radius;

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

public final class CircleApp {
    public static void main(String[] args) {
        double radius = Double.parseDouble(args[0]);
        Circle circle = new Circle(radius);
    }
}

现在要看的代码要少得多了,所以如果你不理解一些东西,就更容易确定它是什么。

赫连彬炳
2023-03-14

构造函数不是<code>void</code>方法。这

public void Circle( double rd )

应该是

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

那么下一个问题是

private double calCircumference(double r)

应该是

private double calCircumference()

public double rd = Double.parseDouble( args[0] ); 

没有意义,那不在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);
    }
}
 类似资料:
  • 我不明白为什么它会给我一个错误代码,找不到合适的构造函数。 怎么了?

  • 所以我接到了一个任务,我必须在一段有点大而草率的代码中查找并修复许多错误。我只剩下最后一个了,我找不到解决这个问题的办法。我读过类似的场景,人们会犯同样的错误,但我无法将它们与我的代码联系起来。这就是我得到错误的地方:

  • 我正在用Java编写一个Volume and Book类,以帮助我更好地理解构造函数和对象——基本上是OOP的更广泛方面。当我尝试创建一个主类时,我收到一个错误,其中说明了以下内容: “类卷中的构造函数卷不能应用于给定类型;必需:字符串、整数、Book[] 找到:无参数 原因:实际列表和正式列表的长度不同 ----” 这是我目前掌握的代码。 一、卷类: } 这里是main,我收到了上面提到的错误:

  • 我开始学习Java,遇到了一个我无法解决的问题。我有一个名为MyClass的类,带有构造函数。我想将该构造函数设置为访问私有字段: 当我删除构造函数时,我可以从另一个类调用somethingElse。然而,当我沿着这条路线尝试一些东西时 我在data=new MyClass()处得到一个错误,即实际参数和形式参数的长度不同,并且“需要long,found no参数”。我该如何解决这个问题?

  • 我目前的一项作业(用Java完成)有问题。我得到了一个关于抽象类和子类的项目。然而,我一直在为它创建复制构造函数,因为我不断地得到错误:实际的和正式的参数列表的长度不同。这里,arr是抽象的“超级”类,其内部的构造函数仅被定义(如下所示)。构造函数具有与2D数组的行(m)和列(n)相对应的参数。在Board类(扩展arr)中,我必须同时定义构造函数和复制构造函数。我已经使用super(m,n)定义