2011-11-25 162 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

相關問題