【问题标题】:How to use array list ? [Oop]如何使用数组列表? [哎呀]
【发布时间】:2012-09-11 16:38:23
【问题描述】:

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

这是动物园类:

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 和我以前从未问过

【问题讨论】:

  • 如果您遵守 Java 命名约定,它将对您(和其他人)有所帮助,特别是:类名以大写字母开头(ZooAnimal),方法名使用驼峰式( addAnimal).
  • 什么不起作用?你期望得到什么,你得到了什么。我希望这会打印 2 假设您更改了 List&lt;Animal&gt; animals = new ArrayList&lt;Animal&gt;();
  • id 当然应该是静态的。
  • (以下内容并非恶意)停止发布重复问题。你需要做的是退后一步,通过一些关于 java/programming 的介绍。值得一提的是,命名约定实际上非常重要。如果您自己解决问题,您将学到 10 倍以上的知识。
  • @JBNizet 不应再使用作业标签:stackoverflow.com/tags/homework/info

标签: java arraylist


【解决方案1】:

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

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

希望对您有所帮助。

【讨论】:

  • 也许为了你自己和清晰起见,将 getSizeOfZoo() 重命名为更好的名称,如 zooPopulation() 或 numberOfAnimals() 或其他任何名称。
【解决方案2】:

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

根据您的代码,zoo.id 似乎会返回ArrayList&lt;animals&gt; 的大小,为什么要使用上述列表的大小而不是animals.size()封装 规则getAnimals().size()这可能会返回 NullPointerException,所以初始化ArrayList&lt;animals&gt; with a emptyarraylist`

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

在更新时,检查animals.contains(Animal ann) 是否为真,通过 ID 或 hashCode 然后检查列表中 ann 的索引,然后通过 animals.set(&lt;index&gt;, ann) 更新 ann

【讨论】:

    【解决方案3】:

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

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

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

    另外,请注意 javadoc 中所有类如何以大写字母开头,并且所有方法都以驼峰形式拼写(如 addAnimal() 而不是 addanimal())。尊重这些约定:它们是代码可读性的一个非常重要的因素。

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

    【讨论】:

    • 我还要补充一点,最好将 id 初始化为 0,这是很有可能的,因为它是静态的,并且如果要扩展/继承类,最好避免可能的头痛。
    • 正如我在回答中所说,这个 ID 变量完全没有必要,甚至不应该存在。
    • 确实如此,但我想它存在是有原因的。如果不是,那么你的答案是完全正确的。
    • 鉴于所问的问题,在问题的顶部,这个变量绝对没有理由。
    猜你喜欢
    • 1970-01-01
    • 2013-09-25
    • 1970-01-01
    • 1970-01-01
    • 2013-02-23
    • 1970-01-01
    • 1970-01-01
    • 2012-08-01
    • 2019-02-13
    相关资源
    最近更新 更多