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

实际参数列表和正式参数列表的长度不同

索和璧
2023-03-14

我正在用Java编写一个Volume and Book类,以帮助我更好地理解构造函数和对象——基本上是OOP的更广泛方面。当我尝试创建一个主类时,我收到一个错误,其中说明了以下内容:

“类卷中的构造函数卷不能应用于给定类型;必需:字符串、整数、Book[] 找到:无参数 原因:实际列表和正式列表的长度不同 ----”

这是我目前掌握的代码。

一、卷类:

public class Volume extends Book{

public String volumeName;
public int numberOfBooks;
public Book[] books;

// Constructor with parameters
public Volume(String volumeName,int numberOfBooks,Book[] books){
    this.volumeName = volumeName;
    this.numberOfBooks = numberOfBooks;
    this.books = new Book[numberOfBooks];
}

// String representation of the Volume
public static String toString(Volume volume){
    String volumeDescription = "Here are the details of the selected Volume:\n";
    volumeDescription += "The volume's name is \"" + volume.volumeName + "\".\n";
    volumeDescription += "It contains " + volume.numberOfBooks + " books.\n";
    volumeDescription += "Here is a list of books it contains:\n";
    for(int i = 0; i < volume.numberOfBooks; i++){
        volumeDescription += "[" + i + "] " + volume.books[i];
    }
    return volumeDescription;
}

// Description of each book in the Volume
public static String getBookArray(Volume volume){
    Book[] listOfBooks = volume.books;
    String bookDescriptions = "Here is a description of each book in the Volume.\n";
    for(int i = 0; i < listOfBooks.length; i++){
        bookDescriptions += "Book #" + i + ":\n";
        bookDescriptions += "Title: " + listOfBooks[i].title + "\n";
        bookDescriptions += "Author: " + listOfBooks[i].author + "\n";
        bookDescriptions += "Number of pages: " + listOfBooks[i].numberOfPages + "\n";
    }
    return bookDescriptions;
}

}

这里是main,我收到了上面提到的错误:

public class Volume_Main extends Volume{

public static void main(String[] args) {
    // TODO code application logic here
}

}

我已经正确设置了Volume中的构造函数(据我所知),但是仍然收到这个错误。有什么提示或建议吗?提前感谢!

共有3个答案

卢阳成
2023-03-14

您的Volume类构造函数是无参数构造函数。您正在Volume_Main类中扩展Volume类。默认情况下,它将在Volume类中不查找arg构造函数。

所以在Volume_Main类中,您必须定义将调用Volume类的正确构造函数的构造函数。

编辑:

有两种方法可以解决此问题。

1)如果您不需要扩展Volume类,那么您可以从Volume_Main类中删除< code>'extends Volume'。

2)您可以在Volume类中定义一个无arg构造函数,该构造函数将调用您定义的参数化构造函数,例如

public Volume() {
  this(voulmeName, numberOfBooks, books);
}
潘英豪
2023-03-14

或者你删除扩展卷或者你在Volume_Main中创建一个具有相同参数的构造器。我个人认为在这种情况下从卷中继承没有意义。

南门鸿雪
2023-03-14

在Java中,每个类都必须有一个构造函数。如果你没有明确定义一个,编译器会为你插入一个空的构造函数。如果您自己没有显式调用超类构造函数,构造函数也隐式调用父类的无参数构造函数。因此,您的< code>Volume_Main类具有以下构造函数:

public Volume_Main() {
    super()
}

但是,Volume_Main的父类是Volume,并且没有无参数构造函数,因此编译器抛出错误。Volume_Main可能没有理由扩展Volume,但至少您必须在Volume中显式定义无参数类。

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

  • 当我试图在的()括号中放入一些内容时,出现了错误: 类Friends中的构造函数Friends不能应用于给定类型。必填:无参数。Found:字符串,int.原因:实际的或正式的参数列表的长度不同。 但是当我取出参数时,我的朋友列表只显示“null 0”。即使我有也没有设置这些值吗? 而且,当我试图删除一个朋友,它没有任何作用。在源代码中,它确实会提出一个警告, 对util.java.Collect

  • 当我试图在<code>Friends f=new Friend(friendsName,Friends Age)的()括号中添加内容时 出现错误: 朋友类中的构造函数朋友不能应用于给定类型。必需:无参数。找到:字符串,int。原因:实际或正式参数列表的长度不同。 但当我取出参数时,我的朋友列表只显示“空0”。即使我有

  • 我不明白为什么它会给我一个错误代码,找不到合适的构造函数。 怎么了?

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

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