实现Zoo类(及其测试类)。动物园的名称和面积以米为单位。动物园可以有一个或多个动物。动物有ID,姓名,类型,年龄,性别。我们应该能够将新动物添加到动物园,移除动物并确定动物园中目前有多少动物。
这是Zoo类:
import java.util.ArrayList;
public class Zoo {
String name;
String area;
ArrayList<Animal> animals;
static int id;
public Zoo(String name, String area) {
this.name = name;
this.area = area;
}
public void addanimal(animal ann) {
animals.add(id, ann);
id++;
}
}
public class Animal {
String name;
String type;
String age;
String gender;
public Animal(String name, String type, String age, String gender) {
this.name = name;
this.type = type;
this.age = age;
this.gender = gender;
}
}
public class Test {
public static void main(String[] args) {
Zoo nozha = new Zoo("nozha", "100");
Animal lion = new Animal("lion", "male", "20", "fine");
nozha.addanimal(lion);
Znimal tiger = new Animal("tiger", "male", "30", "ssc");
nozha.addanimal(tiger);
System.out.print(Zoo.id);
}
}
首先我需要帮助功能(addanimal),因为当我打印(zoo.id)它不工作,我不知道如何移除动物请帮助我,我是编程的初学者,这是我第一次使用
之前我从未问过ArrayList答案 0 :(得分:8)
您需要将animals
变量初始化为默认值以外的值null
:
private List<Animal> animals = new ArrayList<Animal>();
然后查看java.util.List
的{{3}},您会看到它包含添加和删除元素的方法,以及返回其大小的方法,从而使其成为id变量完全没必要。
另外,请注意javadoc中所有类如何以大写字母开头,并且所有方法都拼写在camelCase中(如addAnimal()
而不是addanimal()
)。尊重这些约定:它们是代码可读性的一个非常重要的因素。
另外,为变量选择合适的类型。以米为单位的区域应为int或float或double,但不应为String。
答案 1 :(得分:0)
首先我需要帮助功能(addanimal),因为当我打印(zoo.id)
根据您的代码,似乎zoo.id
会返回ArrayList<animals>
的大小,为什么要使用所述列表的大小而不是animals.size()
或封装的规则,getAnimals().size()
。 这可能会返回NullPointerException,因此初始化ArrayList<animals> with a empty
arraylist`
在清除列表中的所述动物时,最好选择animals.remove(Animal ann)
。
在更新时,检查animals.contains(Animal ann)
是否为真,是否通过ID或hashCode 然后检查列表中的ann
索引,然后通过{更新ann
{1}}
答案 2 :(得分:0)
Zoo.java:
import java.util.ArrayList;
public class Zoo {
String name;
double area;
int sizeOfZoo = 0;
ArrayList<Animal> animals = new ArrayList<Animal>();
public Zoo(String name, double area) {
this.name = name;
this.area = area;
}
public void addAnimal(Animal ann) {
animals.add(ann);
}
public int getSizeOfZoo() {
return animals.size();
}
}
Animal.java
public class Animal {
String name;
String type;
String age;
String gender;
public Animal(String name, String type, String age, String gender) {
this.name = name;
this.type = type;
this.age = age;
this.gender = gender;
}
}
Test.java
public class Test {
public static void main(String[] args) {
Zoo nozha = new Zoo("nozha", 100);
Animal lion = new Animal("lion","fine","20","male");
nozha.addAnimal(lion);
Animal tiger = new Animal("tiger","ssc","30","female");
nozha.addAnimal(tiger);
System.out.println("Number of animals in zoo: " + nozha.getSizeOfZoo());
}
}
我为你抛出了一个getSizeOfZoo()方法,以摆脱Id变量。将区域的字符串更改为Double。保持你的类独立,保持命名约定类,变量,methodName()等。它使它更容易阅读。创建狮子和老虎时的参数有点偏差,我现在把它作为名称,类型,年龄,性别。
查看ArrayList的javadoc,你可以弄清楚如何从ArrayList中“删除”一个元素(我不愿意为你做你的项目)。您遇到的问题更多的是编码基础知识,而不是任何Java特定的或特定于OOP的。阅读,尝试mothod removeAnimal(动物一个),看看你是如何继续前进的。如果有任何问题我们可以提供帮助,但请查看getSizeOfZoo()和addAnimal()以及文档,您应该飞行!
希望有所帮助。