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