即使参数正确,也找不到构造函数

时间:2013-12-09 19:50:21

标签: java object constructor compiler-errors

我一直在试图弄清楚这个错误的原因,但我不能:(而且我需要你的帮助来解决它:)

1.我检查了实际的参数列表以确保它与形式参数列表匹配并且确实如此。

2.当我用当前替换它时,没有参数列表的构造函数Book()工作得很好。

错误:

Library.java:83: cannot find symbol
symbol  : constructor Book(int,java.lang.String,java.lang.String,java.lang.String,java.lang.String)
location: class Book
         libraryBooks[100-Book.totalNum] = new Book (ISBN,Author,publishedYear,title,genre);
                                           ^
1 error

课本:

      public class Book {
    private int ISBN;
    private String author;
    private String publicationYear;
    private String title;
    private String genre;
    public static int totalNum=1;
    private String refCode;

    public void Book(int isbn,String auth,String year,String Title,String Genre){
    ISBN=isbn;
    author=auth;
    publicationYear=year;
    title=Title;
    genre=Genre;
    }

    public void Book(){
    ISBN=1234;
    author="-";
    publicationYear="2012";
    title="-";
    genre="-";
    }

public static boolean verifyISBN(int isbn1){
    int[] n=new int [4];
    int isbn=isbn1;
    n[3]=isbn%10;
    for(int i=2;i>=0;i--){
    isbn/=10;
    n[i]=isbn%10;}
    if (((n[0]*3+n[1]*2+n[2]*1)%4)==n[3])
    return true;
    return false; 
}
    }

班级图书馆:

import java.util.*;
public class Library {
   private static Scanner console=new Scanner(System.in);
   private static Book [] libraryBooks=new Book  [100];

   public static void main (String[]args){

                  System.out.println("Enter the book\'s ISBN");
                  int ISBN=console.nextInt();
                  System.out.println("Enter the book\'s author name");
                  String author=console.next();
                  System.out.println("Enter the book\'s publish year");
                  String publicationYear=console.next();
                  System.out.println("Enter the book\'s title");
                  String title=console.next();
                  System.out.println("Enter the book\'s genre");
                  String genre=console.next();
                  if(addBook(ISBN,author,publicationYear,title,genre))
                     System.out.println("The book was successfully added to your library");
                  else
                     System.out.println("The book sasn't successfully added to your library");

}
   public static boolean addBook(int ISBN,String Author,String publishedYear,String title, String genre){
      if (Book.verifyISBN(ISBN)&&(findBook(ISBN)!=-1)){
         libraryBooks[100-Book.totalNum] = new Book (ISBN,Author,publishedYear,title,genre);
         Book.totalNum++;
         return true;}
      return false;
   }

   public static int findBook(int ISBN){
      for (int i=99;i>=(100-Book.totalNum);i--)
         if(libraryBooks[i].getISBN()==ISBN)
            return i;

      return -1;
   }}

请帮帮我:(!

2 个答案:

答案 0 :(得分:3)

由于void关键字(构造函数没有返回类型),此行不是构造函数。您已经创建了一个返回void的方法。

public void Book(int isbn,String auth,String year,String Title,String Genre){

删除void

public Book(int isbn,String auth,String year,String Title,String Genre){

您还需要使用其他Book“方法”:

public Book(){

您没有定义任何实际的构造函数,因此Java隐式包含一个不带参数的默认构造函数(并且什么都不做)。这就是为什么没有参数调用它没有错误。

答案 1 :(得分:0)

在这个程序中,你犯了一个很小的错误。 您忘记了构造函数的一个重要属性,即构造函数没有返回类型。 这里给出返回类型为void但在内部它自动返回当前类对象。 我希望现在这个概念对你来说更清楚了。