Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 类构造函数给了我一个错误_Java - Fatal编程技术网

Java 类构造函数给了我一个错误

Java 类构造函数给了我一个错误,java,Java,我当前的代码不完整,但是我想做的是让我的方法readDataFromFile读取包含动物(名称、物种等)的文件,并使用扫描仪将它们添加到我的Zoo。 我有两门课:动物园和动物 我这行有一个错误:addAnimal(新动物(物种,名称)) Blue Jay向我解释了为什么它不起作用: “Animal类中的构造函数Animal不能应用于给定类型 必需:Java.lang.String、Java.lang.String、MyZoo找到: java.lang.String,java.lang.Strin

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

我有两门课:
动物园
动物

我这行有一个错误:
addAnimal(新动物(物种,名称))

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();
    }

}

这是一个构造函数问题,而不是扫描程序问题

您的动物构造函数有3个参数。这意味着在while循环中,当您创建一个新动物时,您需要提供3个参数!唯一的解决方法是重载构造函数(添加一个包含两个参数的新构造函数)。将此添加到您的动物类:

public Animal(String species, String name)
{
    this.species = species;
    this.name  = name;
}

根据IDE的“解释”,在创建新的动物对象时,似乎没有向构造函数传递足够的参数。它需要一个myZoo类型的对象作为字符串放在物种的顶部,名称作为字符串。

您的
Animal
类的构造函数需要三个参数(
String species,String name,myZoo owner
),您只需要两个参数来调用它:
新动物(species,name)
。提供
MyZoo
对象
或添加新构造函数:

public Animal(String species, String name){
  this.species = species;
  this.name  = name;
}
由于您只需要
MyZoo
对象的
id
,因此可以将
Animal
构造函数更改为:

 public Animal(String species, String name, int zooId){
   this.id = zooId;
  this.species = species;
  this.name  = name;
}
然后您可以像下面这样实例化
Animal

 Animal animal = new Animal(species, name, zooId);
对于您的
MyZoo
类,您可以通过添加
动物来执行此操作:

 addAnimal( new Animal(species, name, zooId) ); 
更改此行:

addAnimal( new Animal(species, name) );
为此:

addAnimal( new Animal(species, name, this) );
之所以这样做,是因为您的
Animal
构造函数需要第三个参数,即所属动物园。由于包含此代码的方法位于
Zoo
实例中,因此可以使用
this
引用它


编辑:额外的好处是您不必编辑动物类。

问题出在哪里?你有错误吗?例外?简单地说“这不管用”不会给你任何帮助。到目前为止,我所创建的编译没有错误,但是我正在努力创建一个从文件读取数据的循环。事实上,我(更新)了readDateFromFile方法中while循环的另一行,这一行出现了一个错误:addAnimal(新动物(物种,名称));也许你应该发布这个错误?发布你的动物类的实现,那么在不涉及动物类的情况下,是否有可能做到这一点?
addAnimal( new Animal(species, name, this) );