首页 > 解决方案 > 类构造函数给我一个错误

问题描述

我当前的代码不完整,但是我想要做的是让我的方法readDataFromFile读取包含动物(名称、物种等)的文件并将它们添加到我Zoo使用的扫描仪中。

我有2节课:Zoo&Animal

我对这一行有一个错误:addAnimal( new Animal(species, name) );

Blue Jay 解释了为什么它不起作用:

“Animal 类中的构造函数 Animal 不能应用于给定类型;

必需:Java.lang.String,java.lang.String,MyZoo 发现:java.lang.String,java.lang.String 原因:实际参数列表和形式参数列表的长度不同”

动物园类:

public class MyZoo

{
    private String zooId;
    private int nextAnimalIdNumber;
    private TreeMap<String, Animal> animals;
    private Animal animal;

    public MyZoo(String zooId)
    {
        this.zooId = zooId.trim().substring(0,3).toUpperCase();
        nextAnimalIdNumber = 0;
        animals = new TreeMap<String, Animal>();
    }

    public void addAnimal(Animal animal)
    {
        animals.put(animal.getName(), animal);
        this.animal = animal;
    }


    public void readDataFromFile(String fileName) throws FileNotFoundException
    {  

        JFrame mainWindow = new JFrame();
        FileDialog fileDialogBox = new FileDialog(mainWindow, "Open", FileDialog.LOAD);
        fileDialogBox.setDirectory("."); 
        fileDialogBox.setVisible(true);

        fileName = fileDialogBox.getFile();
        String directoryPath = fileDialogBox.getDirectory();

        File dataFile = new File (fileName);
        Scanner scanner = new Scanner(dataFile);
        zooId = scanner.nextLine();
        System.out.println("ID of the Zoo: " + zooId);
        int noOfAnimalsRead = scanner.nextInt();
        System.out.println("no of animals read from file was " + noOfAnimalsRead + "\n");
        scanner.nextLine();
        while( scanner.hasNext() )
        {
            String name = scanner.next();
            System.out.println("Name of Animal: " + name);
            String species = scanner.next();
            System.out.println("Name of species: " + species);
            String id = scanner.next();
            System.out.println("ID of Animal: " + id);

            addAnimal( new Animal(species, name) );        
            scanner.nextLine() ;
        }
        scanner.close();
    }

}

动物类:

public class Animal
{
    private String id;
    private String species;
    private String name;
    public Animal(String species, String name, MyZoo owner)
    {
        id = owner.allocateId();
        this.species = species;
        this.name  = name;
    }

    public String getId()
    {
        return id;
    }

    public String getName()
    {
        return name;
    }

    public String getSpecies()
    {
        return species;
    }

    public String toString()
    {
        return id + "  " + name + ": a " + species;
    }
}

标签: java

解决方案


根据 IDE 的“解释”,当您创建新的 Animal 对象时,您似乎没有将足够的参数传递给构造函数。它期望在物种之上的 myZoo 类型的对象作为字符串和名称作为字符串。


推荐阅读