0

实现 Zoo 类(及其测试类)。动物园的名称和面积以平方米为单位。动物园可以有一种或多种动物。动物具有 ID、名称、类型、年龄、性别。我们应该能够向 Zoo 添加新的 Animals,移除 Animals 并确定目前动物园中有多少动物。

这是动物园类:

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,我从来没有问过

4

3 回答 3

8

您需要将animals变量初始化为默认值以外的其他值,即null

private List<Animal> animals = new ArrayList<Animal>();

然后查看 的javadocjava.util.List您会发现它包含添加和删除元素的方法,以及返回其大小的方法,因此完全不需要 id 变量。

此外,请注意在 javadoc 中所有类如何以大写字母开头,并且所有方法都以 camelCase 拼写(likeaddAnimal()和 not like addanimal())。尊重这些约定:它们是代码可读性的一个非常重要的因素。

此外,为您的变量选择适当的类型。面积(以平方米为单位)应该是 int 或 float 或 double,但不能是 String。

于 2012-09-19T11:17:40.273 回答
0

动物园.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();
        }
    }

动物.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;
        }    
    } 

测试.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 变量。将区域的字符串更改为双精度。保持你的类分开,保持命名约定 Class、variable、methodName() 等。这样更容易阅读。创建狮子和老虎时的参数有点偏离,我现在将其设置为名称,类型,年龄,性别。

查看 ArrayList 的 javadoc,您可以弄清楚如何从 ArrayList 中“删除”一个元素(我不愿意为您做您的项目)。您遇到的问题更多是关于编码基础知识,而不是任何特定于 Java 或特定于 OOP 的问题。读一读,试试方法 removeAnimal(animal an) 看看你是怎么做的。如果有任何问题,我们可以提供帮助,但请查看 getSizeOfZoo() 和 addAnimal() 以及文档,您应该会飞!

希望有帮助。

于 2012-09-19T11:50:09.570 回答
0

首先我需要有关功能(addanimal)的帮助,因为当我打印时(zoo.id)

根据您的代码,它似乎zoo.id会返回ArrayList<animals>为什么使用上述列表的大小或按照封装animals.size()规则的大小,. 这可能会返回 NullPointerException,因此初始化arraylist`getAnimals().size()ArrayList<animals> with a empty

在删除列表中的上述动物时,您最好选择animals.remove(Animal ann).

在更新时,通过 ID 或 hashCodeanimals.contains(Animal ann)检查是否为真,然后检查列表中的索引,然后更新annannanimals.set(<index>, ann)

于 2012-09-19T11:19:28.130 回答