如何使用数组列表? [OOP]

时间:2012-09-19 11:11:12

标签: java arraylist

实现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

3 个答案:

答案 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()以及文档,您应该飞行!

希望有所帮助。