2011-11-25 161 views
1

我必须制作一个有三种类型的动物(长颈鹿,老虎和企鹅)的动物园 我必须制定一种将动物分配给动物园的方法(可以有多个动物园,因此它必须是具体),然后可以打印该动物园中所有动物的方法。如何将多个对象分配给另一个类/对象?

如何将多个动物添加到动物园? 我可以分配多个动物动物园(在那里你可以打印动物的细节,它显示了动物园,但我需要打印动物园的细节,并用显示动物:

public class Animal extends Zoo { 
    private Zoo zoo; 
    public void setZoo(Zoo zoo){ 
     this.zoo = zoo; 
    } 
) 

但我可以“T打印出所有的动物在动物园里,刚分配到动物园最近的动物

这是我想出了一个打印最近:

public class Zoo { 
    private Animal animal; 
    public void addAnimal(Animal animal){ 
     this.animal = animal; 
    } 
} 

非常感谢! !

+0

首先,最好把家庭作业标记为“家庭作业”。其次,将动物园作为动物不是动物园来扩展动物园是没有意义的。在你的第二个片段中,你只允许一只动物。你已经在这里使用'array'标签了,所以推测这是你正在寻找的提示。你的'Zoo'需要一个'Animal'数组,然后'addAnimal'方法需要将该动物添加到该数组中。 –

+0

我该如何做到这一点,当我添加一个新的动物,它不会保存到相同的数组索引号? 我试着做一个static int number_of_animals; 然后在Animal构造函数中有这个'number_of_animals + = 1'。 但是当我使用引用数组中创建的数组中的数字时,我得到一个空指针 – QuackMan245

回答

3

我会尽力帮忙,但我怀疑我正确地理解了你。

首先,你需要一个抽象类Animal;从动物园继承(他们有什么共同点?)和你的动物园类拥有这3种动物是没有意义的。

他们三人都应该从一个抽象的动物继承,因为......他们是动物,当处理这些具体动物中的3个时,事情变得更加容易。

class Zoo { 
    private Animal[] animals; 
    private String zooName; 
    private int zooSize; 

    public String getName() { 
     return zooName; 
    } 

    public Zoo(String name, int capacity) { 
     zooSize = 0; 
     animals = new Animal[capacity]; 
     this.zooName = name; 
    } 
    public void addAnimal(Animal an) { 
     animals[zooSize] = an; 
     zooSize++; 
    } 

    public String toString() { 
     String tempStr = "In " + zooName + ", we keep these " + zooSize + " animals:\n"; 
     for(int i=0; i < zooSize; ++i) { 
      tempStr += animals[i].getName() + "\n"; 
     } 
     return tempStr; 
    } 
} 

abstract class Animal { 
    private Zoo zoo; 
    private String name = ""; 

    public Animal(String name) { 
     this.name = "Animal " + name; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setZoo(Zoo zoo) 
    { 
     this.zoo = zoo; 
     this.zoo.addAnimal(this); 
    } 

    public String belongsWhere() { 
     return name + " belongs to " + 
       zoo.getName() + " zoo"; 
    } 
} 

你看,现在我们不关心什么类型的动物,动物园保持,它只是一个动物,它有一个名字,它依赖的是具体的一个(老虎,长颈鹿,企鹅)。

class Giraffe extends Animal { 

    public Giraffe(String surname) { 
     super("Giraffe " + surname); 
    } 
} 

class Tiger extends Animal { 

    public Tiger(String surname) { 
     super("Tiger " + surname); 
    } 
} 

class Penguin extends Animal { 

    public Penguin(String surname) { 
     super("Penguin " + surname); 
    } 
} 

,并测试它...

public class Main { 

     public static void main(String[] args) { 
      Zoo z1 = new Zoo("Zoo1"); 
      Zoo z2 = new Zoo("Zoo2"); 

      Animal pen1 = new Penguin("Luke"); 
      Animal gir1 = new Giraffe("Duke"); 
      Animal pen2 = new Penguin("Fluke"); 
      Animal tig1 = new Tiger("Brooke"); 

      pen1.setZoo(z1); 
      pen2.setZoo(z2); 
      gir1.setZoo(z2); 
      tig1.setZoo(z2); 

      System.out.println(pen1.belongsWhere()); 
      System.out.println(tig1.belongsWhere()); 

      System.out.println(z1); System.out.println(z2); 
     } 
} 

我只是希望我帮助。

+0

一个很好的例子!不能做得更好... –

+0

是的,这真的很棒,我只是想找到一种方法使用没有List函数的ur方法,因为我没有了解它们,我应该坚持数组。 相当困难.. – QuackMan245

+0

@ user1066035看到我更新的答案。 – nullpotent

0

Zoo将需要由动物的List<Animal>组成,而不仅仅是一个Animal

相关问题